1
我正在從python的requests
庫移動到scrapy
,並且我在發出簡單POST請求時遇到問題。我設置標題和有效載荷這樣:Scrapy POST請求不起作用 - 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}}
然後發出請求是這樣的:
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個狀態。如果我使用與requests
庫完全相同的標頭和有效載荷發出請求,它會給我200個狀態並按預期返回一個json。
r = requests.post(url, headers=headers, data=json.dumps(payload), verify=False)
我在做什麼錯?
你真的不應該設置你自己的'Content-Length'頭。大多數圖書館都會爲你計算。如果'scrapy'發送兩次,服務器*規格要求*返回400. –
就是這樣!現在就像魅力一樣。謝謝! :) –
@ sigmavirus24這個答案很好,請將它發佈在答案區。 –