scrapy 怎么post 请求payload形式的参数

有些网站post参数是payload形式的,我用requests.post(url,json=payload)就可以请求成功,有些是formdata形式的,用requests.post(url,data=formdata)。
但是我用scrapy的时候用formrequest是不能发送payload形式的参数并且请求成功的,那么scrapy怎么post请求payload形式的参数

阅读 6.9k
3 个回答

类似这样使用!

req = scrapy.FormRequest('http://httpbin.org/post', formdata=data)

例子:

In [29]: req = scrapy.FormRequest('http://httpbin.org/post', formdata=data)

In [30]: fetch(req)

In [31]: response
Out[31]: <200 http://httpbin.org/post>

In [32]: print(response.body_as_unicode())
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "name": "python"
  },
  "headers": {
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Encoding": "gzip,deflate",
    "Accept-Language": "en",
    "Connection": "close",
    "Content-Length": "11",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "Scrapy/1.4.0 (+http://scrapy.org)"
  },
  "json": null,
  "origin": "112.96.195.12",
  "url": "http://httpbin.org/post"
}

In [33]: r = requests.post('http://httpbin.org/post', data=data)

In [34]: print(r.text)
{
  "args": {},
  "data": "",
  "files": {},
  "form": {
    "name": "python"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
    "Content-Length": "11",
    "Content-Type": "application/x-www-form-urlencoded",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.18.4"
  },
  "json": null,
  "origin": "112.96.195.12",
  "url": "http://httpbin.org/post"
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题