我是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']
感谢您的帮助
答案 0 :(得分:1)
不知道是否与此相关,但是我将在此处发布。 proxymesh和scrapy或python请求存在问题。 连接到代理时,将CONNECT请求发送到代理服务,以创建将转发实际请求的隧道。 如果请求成功,则proxymesh将X-Proxymesh-IP添加到CONNECT请求的确认响应中。该报头完全被scrapy遗漏了,因为它仅考虑了实际请求的响应报头。
这仅发生在HTTPS请求上,因为实际请求的内容已加密。
参考文献:
https://docs.proxymesh.com/article/74-proxy-server-headers-over-https
答案 1 :(得分:0)
也许你也需要这样做?
DOWNLOADER_MIDDLEWARES = {
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 1,
}
在你的回调函数中,你确定要打印response.headers