1
파이썬의 requests
라이브러리에서 scrapy
으로 이동하고 간단한 POST 요청을하는 데 문제가 있습니다.Scrapy POST 요청이 작동하지 않음 - 400 Bad Request
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}}
을 그리고 요청과 같이 제작 : I는 다음과 같은 헤더와 페이로드를 설정하고
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이 답변은 훌륭합니다. 답변 영역에 게시하십시오. –