You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

用Python重放捕获的请求与浏览器结果不一致的问题排查

问题描述

尝试通过Python与目标表单交互,已通过Chrome开发者工具捕获浏览器的请求/响应,但用Python重放请求时,响应结果与浏览器不一致:

  • 浏览器提交无效凭证时返回:{"message":"Credenziali non valide","errorCode":"","success":false}(符合预期)
  • Python请求返回:{'dataResult': ['<long alphanumeric code redacted>'], 'success': True}(固定长串,不符合预期)

捕获的浏览器请求详情

请求头

Accept: application/json, text/plain, */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPvCnB4Ae6FtNAcnc
Referer: https://referti.policlinicodiliegro.it/servizi/
sec-ch-ua: "Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "macOS"
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36

请求负载

------WebKitFormBoundaryPvCnB4Ae6FtNAcnc
Content-Disposition: form-data; name="serviceName"

PortaleRefertoPublicService
------WebKitFormBoundaryPvCnB4Ae6FtNAcnc
Content-Disposition: form-data; name="methodName"

accessByPinSisWeb
------WebKitFormBoundaryPvCnB4Ae6FtNAcnc
Content-Disposition: form-data; name="parametri"

{"utente":"A","password":"B","pin":"C"}
------WebKitFormBoundaryPvCnB4Ae6FtNAcnc--

初始Python代码

import requests

r = requests.post('https://referti.policlinicodiliegro.it/IasiSmartControl/sisweb/dataServiceLoad.action', files={
    'serviceName': 'PortaleRefertoPublicService',
    'methodName': 'accessByPinSisWeb',
    'parametri': '{"utente":"A","password":"B","pin":"C"}',
}, headers={
    'Accept': 'application/json, text/plain, */*',
    'Referer': 'https://referti.policlinicodiliegro.it/servizi/',
    'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"macOS"',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
})

print(r.json())

排查发现的关键差异

检查Python发送的请求体,发现每个form字段都被自动添加了filename属性,而浏览器的原生请求里没有这个字段:

--c960d72f4d302329b731d85ef4ee4b37
Content-Disposition: form-data; name="serviceName"; filename="serviceName"

PortaleRefertoPublicService
...
解决方法

要去掉自动添加的filename,需要将files中的每个值改为元组(None, 值),这样requests就不会额外添加filename字段:

import requests

r = requests.post('https://referti.policlinicodiliegro.it/IasiSmartControl/sisweb/dataServiceLoad.action', files={
    'serviceName': (None, 'PortaleRefertoPublicService'),
    'methodName': (None, 'accessByPinSisWeb'),
    'parametri': (None, '{"utente":"A","password":"B","pin":"C"}'),
}, headers={
    'Accept': 'application/json, text/plain, */*',
    'Referer': 'https://referti.policlinicodiliegro.it/servizi/',
    'sec-ch-ua': '"Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"macOS"',
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36',
})

print(r.json())
补充说明

如果修改后仍有问题,可能存在其他检测机制:

  • Cookie验证:浏览器请求前可能已获取会话Cookie,Python需要先访问目标页面获取Cookie再提交请求
  • 前置请求验证:站点可能要求先发送OPTIONS预请求,或加载页面时的其他请求作为验证依据
  • 动态生成参数:部分字段可能由页面JS动态生成(如签名、token),需要分析页面JS逻辑获取正确参数

内容的提问来源于stack exchange,提问作者fferri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 14:17:24