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

Scrapy请求中Payload无效果问题排查求助

问题解决:Scrapy POST请求Payload无效的原因及修复

核心问题

你当前代码用json.dumps(payload)生成JSON格式的请求体,但目标服务器不支持JSON格式的参数解析,它期望的是标准的表单编码格式(application/x-www-form-urlencoded)。这就导致服务器无法识别你传入的rechInputCPV参数,返回结果和空Payload一致。而Requests模块中如果用data=payload发送请求,会自动将参数编码为表单格式,所以能正常工作。

修复方案

方案1:使用Scrapy内置的formdata参数(推荐)

直接通过formdata传入字典,Scrapy会自动处理参数编码和请求头设置,无需手动构造body:

url = "https://nr.aws-achat.info/_extranet/index.cfm?fuseaction=mEnt.lister"

payload = {
    'rechInputCPV':'03000000-1',
    'rechInputMetier':'',
    'texte':'',
    'btnSub':'Afficher'
}

yield scrapy.Request(url, method='POST', formdata=payload, callback=self.parse)

方案2:手动构造表单格式请求体

如果需要自定义请求头,可以手动将参数编码为表单格式,并设置对应的Content-Type头:

from urllib.parse import urlencode

url = "https://nr.aws-achat.info/_extranet/index.cfm?fuseaction=mEnt.lister"

payload = {
    'rechInputCPV':'03000000-1',
    'rechInputMetier':'',
    'texte':'',
    'btnSub':'Afficher'
}

headers = {'Content-Type': 'application/x-www-form-urlencoded'}
yield scrapy.Request(url, method='POST', body=urlencode(payload), headers=headers, callback=self.parse)

验证点

检查你之前用Requests成功的代码,应该是使用了requests.post(url, data=payload)而非json=payload,上述方案1完全对应这个逻辑,能保证参数格式和请求头与Requests一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 05:27:15