【问题标题】:Scrapy not adding content-length to FormRequest headerScrapy 不向 FormRequest 标头添加内容长度
【发布时间】:2016-02-04 04:01:02
【问题描述】:

这是参考以下问题:

Scrapy: POST request returning JSON response (200 OK) but with incomplete data

我认为,这里有两个相互关联的问题:

1)scrapy没有将Content-Length添加到Header中。

header = {#'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0',
           'X-Requested-With': 'XMLHttpRequest',
           'Host': 'www.zomato.com',
           'Accept': '*/*',
           'Referer': 'https://www.zomato.com',
           'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
           'dont_filter':'True' }

发送到服务器的实际标头不包含 Content-Length

我相信由于这个原因,响应不包含预期值。 注意:相反,我看到在将 cookie 发送到服务器之前,scrapy 会自动将 cookie 添加到标题中。

为了手动解决这个问题,我正在尝试手动设置 Content-Length。

header = {#'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0',
       'X-Requested-With': 'XMLHttpRequest',
       'Host': 'www.zomato.com',
       'Accept': '*/*',
       'Referer': 'https://www.zomato.com',
       'Content-Length':'57'
       'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
       'dont_filter':'True' }

但我现在收到此请求的 400 bad request 错误

我尝试通过添加到 scrapy.cfg 来禁用 cookie 尝试

COOKIES_ENABLE = False

但我仍然看到scrapy将cookie添加到请求中。

另外,我在 scrapy.cfg 中添加了以下内容

DOWNLOADER_MIDDLEWARES ={'scrapy.downloadermiddlewares.cookies.CookiesMiddleware':None,
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware':None,
}

再次没有运气。

谁能帮我解决这个问题?自过去 3 天以来一直在努力解决此问题。 :(

非常感谢。

【问题讨论】:

  • 你能捕捉到实际发送的标题并发布它们吗?

标签: python cookies request scrapy


【解决方案1】:

您可以针对此服务器代码运行您的蜘蛛并捕获标头吗?

import BaseHTTPServer

class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_POST(self):
        print(self.headers)
        self.send_response(200)
        self.end_headers()

def run():
    server_address = ('', 8001)
    httpd = BaseHTTPServer.HTTPServer(server_address, Handler)
    httpd.serve_forever()

if __name__ == '__main__':
    run()

【讨论】:

  • 当然。我将为此返回请求和响应标头。
  • 之前,我可以尝试,我使用 Selenium Webdriver 解决了这个问题。我设法触发了点击事件,Webdriver 为我做了一切。我现在掌握了在驱动程序中呈现的新 html,并且可以在其中废弃所需的标签。但我会尽快为您提供请求的结果。
猜你喜欢
  • 2015-02-25
  • 2012-12-02
  • 2020-12-12
  • 2019-03-25
  • 1970-01-01
  • 2013-01-23
  • 2021-12-27
  • 2011-11-17
  • 2012-04-01
相关资源
最近更新 更多