小编Fla*_*ier的帖子

Scrapy POST 请求不起作用 - 400 Bad Request

我正在从 python 的requests库转移到scrapy,并且在发出简单的 POST 请求时遇到问题。我正在设置标题和有效负载:

headers = {
    'Accept':'*/*',
    'Accept-Encoding':'gzip, deflate, br',
    'accept-language':'en_US',
    'Connection':'keep-alive',
    'Content-Length':'151',
    'content-type':'application/json',
    'Cookie':cookie,
    'Host':host,
    'Origin':origin,
    'Referer':referer,
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
    'x-csrf-token':token
}

payload = {"targetLocation":{"latitude":lat,"longitude":lng}}
Run Code Online (Sandbox Code Playgroud)

然后像这样提出请求:

def start_requests(self):
    u = self.url
    yield scrapy.Request(u, method='POST',
                            callback=self.parse_httpbin,
                            errback=self.errback_httpbin,
                            body=json.dumps(self.payload),
                            headers=self.headers)
Run Code Online (Sandbox Code Playgroud)

这一直给我 400 状态。如果我使用与requests库完全相同的标头和有效负载发出请求,它会按预期为我提供 200 状态并返回一个 json。

r = requests.post(url, headers=headers, data=json.dumps(payload), verify=False)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python scrapy http-status-code-400 python-requests

1
推荐指数
1
解决办法
2752
查看次数