Skip to main content
 首页 » 编程设计

python之如何使用 python mechanize 发送有效负载

2025年05月04日14落叶

我想从互联网上获取信息,我使用 python 机械化模块来做到这一点, 但是它在请求时需要post payload,我试了很多方法还是失败了。请帮助我。
这是我抓取的帖子数据:

请求

网址:xxxxxx
请求方式:POST
状态码:200 OK

请求头

**Accept:application/json, text/javascript, */*; q=0.01**   
Accept-Charset:gb18030,utf-8;q=0.7,*;q=0.3   
Accept-Encoding:gzip,deflate,sdch   
Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4   
Connection:keep-alive   
Content-Length:52   
**Content-Type:application/json; charset=UTF-8**   
Cookie:ASP.NET_SessionId: sanntewiq5cz5uq1y0l5g3gy   
Host:xxx.xxx.xxx.xxx:8500   
Origin:xxx.xxx.xxx.xxx:8500   
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko)  Chrome/24.0.1312.57 Safari/537.17   
**X-Requested-With:XMLHttpRequest** 

请求负载

{dispatchorderid:"966A48E572624F2FB2E99F371C232729"}

这是我的代码:

br = mechanize.Browser() 
payload = {'dispatchorderid': "966A48E572624F2FB2E99F371C232729"} 
json_data = json.dumps(payload) 
br.addheaders = [('Content-Type', 'application/json; charset=UTF-8'), 
                ('Accept', 'application/json, text/javascript, */*; q=0.01'), 
                ('X-Requested-With', 'XMLHttpRequest')] 
br.set_debug_http(True) 
res = br.open(url, json_data) 

当我运行这个脚本时,发送信息是:

发送:'POST/DealerManage/AddDispatchorder.aspx/GetDispatchorderEntityList HTTP/1.1\r\nAccept-Encoding: identity\r\nContent-Length: 55
连接:关闭
接受:application/json, text/javascript, /; q=0.01
主机:125.64.15.71:8500
Cookie: ASP.NET_SessionId=34dyw50d3omel2vbsvm41zwp
X-Requested-With: XMLHttpRequest
*内容类型:application/x-www-form-urlencoded'



为什么 Content-Type 没有改变为 'application/json;字符集=UTF-8'?

请您参考如下方法:

这个问题真的很老了,但是现在使用 requests 包要容易得多:

import requests 
head = { 'Content-Type': 'application/json; charset=UTF-8', 
         'Accept': 'application/json, text/javascript, */*; q=0.01', 
         'X-Requested-With': 'XMLHttpRequest' } 
data = dict(dispatchorderid="966A48E572624F2FB2E99F371C232729") 
response = requests.post(url, json.dumps(data), headers=head) 
 
print response.text