413在XHR上使用scrapy,在请求库中工作正常

时间:2014-06-20 20:27:01

标签: python scrapy python-requests scrapy-spider

我试图从使用XML的在线GIS系统中搜集一些数据。我能够使用成功发布有效负载的请求库来启动快速脚本,并返回具有正确结果的HTTP 200,但在将请求移至scrapy时,我不断获得413。我使用Wireshark检查了这两个请求并发现了一些差异,但我并不完全确定我理解它们。

scrapy中的请求如下:

    yield Request(
        self.parcel_number_url,
        headers={'Accept': '*/*',
                 'Accept-Encoding': 'gzip,deflate,sdch',
                 'Accept-Language': 'en-US,en;q=0.8',
                 'Connection': 'keep-alive',
                 'Content-Length': '823',
                 'Content-Type': 'application/xml',
                 'Host': 'xxxxxxxxxxxx',
                 'Origin': 'xxxxxxxxxxx',
                 'Referer': 'xxxxxxxxxxxx',
                 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36',
                 'X-Requested-With': 'XMLHttpRequest'},
        method='POST',
        cookies={'_ga': 'GA1.3.1332485584.1402003562', 'PHPSESSID': 'tpfn5s4k3nagnq29hqrolm2v02'},
        body=PAYLOAD,
        callback=self.parse
    )

我检查过的数据包位于:http://justpaste.it/fxht

包括在使用请求库时的HTTP请求以及在生成scrapy Request对象时的HTTP请求。使用scrapy时,请求似乎更大,使用请求库时,第二个TCP段看起来比第二个TCP段大21个字节。 Content-Length标头也会在scrapy请求中设置两次。

有没有人经历过这种scrapy问题?我之前从来没有抓过任何413的东西。

1 个答案:

答案 0 :(得分:0)

我通过删除Cookie而不是设置" Content-Length"来解决这个问题。在我提出的请求上手动标题。看起来这两个东西是第二个TCP段上的额外21个字节,并导致413响应。也许服务器正在解释" Content-Length"作为2"内容长度"的组合值标题因此返回413,但我不确定。