没有收到标头Scrapy ProxyMesh

时间:2017-10-19 10:50:13

标签: python proxy header scrapy

我是Scrapy / ProxyMesh的新手。 我对Proxymesh服务器的请求似乎正在工作,因为我在ProxyMesh网站上看到我的带宽消耗,并且meta.proxy在我的日志中是正确的。 但是,当我在Scrapy中记录响应头时,我没有收到我应该收到的X-Proxymesh-IP。 这是我的代码。我做错了什么?

这是我的中间件

class Proxymesh(object):

 def __init__(self):

    logging.debug('Initialized Proxymesh middleware')

    self.proxy_ip = 'http://host:port'

 def process_request(self, request, spider):

    logging.debug('Processing request through proxy IP: ' + self.proxy_ip)

    request.meta['proxy'] = self.proxy_ip

这些是我蜘蛛中的设置

custom_settings = {
    "DOWNLOADER_MIDDLEWARES": {
        "projectName.middlewares.proxymesh.Proxymesh" : 1,
     }

这就是响应标题的样子

['Set-Cookie']:['__cfduid=d88d4e4cb7... HttpOnly']
['Vary']:['User-Agent,Accept-Encoding']
['Server']:['cloudflare-nginx']
['Date']:['Thu, 19 Oct 2017 10...38:10 GMT']
['Cf-Ray']:['3b031b30cbef1565-CDG']
['Content-Type']:['text/html; charset=UTF-8']

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

不知道是否与此相关,但是我将在此处发布。 proxymesh和scrapy或python请求存在问题。 连接到代理时,将CONNECT请求发送到代理服务,以创建将转发实际请求的隧道。 如果请求成功,则proxymesh将X-Proxymesh-IP添加到CONNECT请求的确认响应中。该报头完全被scrapy遗漏了,因为它仅考虑了实际请求的响应报头。

这仅发生在HTTPS请求上,因为实际请求的内容已加密。

参考文献:

https://docs.proxymesh.com/article/74-proxy-server-headers-over-https

https://bugs.python.org/issue24964?fbclid=IwAR1c88hpLu2OdmEXlwfZfb2n8lMIqT8JvjLeO7pzsvFEiZBVlfJNpYZ4aFk

https://github.com/requests/requests/issues/3061?fbclid=IwAR34XDJa7dJqNpH33LRlvpoRHpaZJhVl75zXfFkEuBa7IjOVCoIxecW0zhw

答案 1 :(得分:0)

也许你也需要这样做?

DOWNLOADER_MIDDLEWARES = {
     'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 1,
}

在你的回调函数中,你确定要打印response.headers