1
私はPythonのrequests
ライブラリからscrapy
に移動しています。単純なPOSTリクエストを作成する際に問題が発生しています。Scrapy POSTリクエストが機能しない - 400 Bad Request
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)
そして、それは私に400件のステータスを与え続けている。このような要求を行う
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}}
そして:私は、ヘッダやペイロードなどを設定しています。 requests
ライブラリと全く同じヘッダーとペイロードを使用してリクエストを行うと、期待通りに200ステータスが返され、jsonが返されます。
r = requests.post(url, headers=headers, data=json.dumps(payload), verify=False)
私は間違っていますか?
本当にあなた自身の 'Content-Length'ヘッダを設定すべきではありません。ほとんどの図書館がそれを計算します。 'scrapy'が2回送信している場合、サーバは仕様によって400を返す必要があります。 –
それでした!今の魅力のように動作します。ありがとう! :) –
@ sigmavirus24この回答は素晴らしいです、回答エリアに投稿してください。 –