1

我正在尝试从使用 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

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

有没有人遇到过这样的scrapy问题?我以前从来没有用 413 刮过任何东西。

4

1 回答 1

1

我通过删除 cookie 而不是在我产生的请求上手动设置“Content-Length”标头来解决这个问题。似乎这两件事是第二个 TCP 段上额外的 21 个字节并导致了 413 响应。也许服务器将“Content-Length”解释为 2 个“Content-Length”标头的组合值,因此返回 413,但我不确定。

于 2014-10-09T01:07:12.450 回答