python scrapy request_转换为Python Scrapy Request后,Python request.post()无法正常工作...

我有简单的POST请求代码。

headers = {

dictionary of headers

}

params = (

('param1', '0'),

('param2', '5668294380'),

('param3', '8347915011'),

)

response = requests.post('https://website.com', headers=headers, params=params, data=__data)

这完全可以作为独立的Python程序使用。

但是我想在Python Scrapy中做到这一点

Request(url='https://website.com',callback=self.callback_fun, headers=headers, body=__data, method="POST")

它给我的回应是URL无法处理POST请求

我试过了

FormRequest(url='https://website.com',callback=self.callback_fun, headers=headers, body=__data)

它给了我同样的回应。

我试过了

Request(url='https://website.com?' + urllib.urlencode(self.params),callback=self.callback_fun, headers=headers, body=__data, method="POST")

但这给了我400 Bad Request

Scrapy怎么了?我的意思是纯Python脚本有效,但在Scrapy中不起作用。

我认为主要问题是如何params=params使用Scrapy发送。Scrapy仅允许通过body参数发送请求有效载荷

解决方案

class scrapy.http.FormRequest(url[, formdata, ...])

参数:formdata(元组的dict或可迭代)–是一个字典(或(键,值)元组可迭代),包含将被url编码并分配给请求主体的HTML Form数据。

在HTTP中,如果要发布数据,则将数据设置在请求正文中并进行编码。您可以编码自己的字典或使用ScrapyFormRequest:

class FormRequest(Request):

def __init__(self, *args, **kwargs):

formdata = kwargs.pop('formdata', None)

if formdata and kwargs.get('method') is None:

kwargs['method'] = 'POST'

super(FormRequest, self).__init__(*args, **kwargs)

if formdata:

items = formdata.items() if isinstance(formdata, dict) else formdata

# encode dict here

querystr = _urlencode(items, self.encoding)

if self.method == 'POST':

# set message header

self.headers.setdefault(b'Content-Type', b'application/x-www-form-urlencoded')

# set message body

self._set_body(querystr)

else:

self._set_url(self.url + ('&' if '?' in self.url else '?') + querystr)

----------------------------更新--------------

在请求代码中:

response = requests.post('https://website.com', headers=headers, params=params, data=__data)

它首先将参数添加到URL,将发布数据添加到修改后的URL。您应该更改您的URL。您可以通过以下方式获取网址:

print(response.url)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值