Scrapy HTTP代理身份验证

5 投票
2 回答
4638 浏览
提问于 2025-04-17 06:42

我可以通过设置 request.meta['proxy'] 来使用 HTTP 代理,但我该怎么进行代理认证呢?

这样指定用户名和密码是行不通的:

request.meta['proxy'] = 'http://user:pass@123.456.2323:2222'

我查了一下,可能需要发送 request.headers['Proxy-Authorization'],但我应该用什么格式发送呢?

2 个回答

1

w3lib模块有一个非常方便的功能,可以满足这个需求。

from w3lib.http import basic_auth_header

request.meta["proxy"] = "http://192.168.1.1:8050"
request.headers["Proxy-Authorization"] = basic_auth_header(proxy_user, proxy_pass)

这个功能在Zyte(scrapy的维护者)的一篇博客文章中也有提到。

10

用户名和密码是用一种叫做Base64的方式编码的,格式是“用户名:密码”。

import base64

# Set the location of the proxy
proxy_string = choice(self._get_proxies_from_file('proxies.txt')) # user:pass@ip:port
proxy_items = proxy_string.split('@')
request.meta['proxy'] = "http://%s" % proxy_items[1]

# setup basic authentication for the proxy
user_pass=base64.encodestring(proxy_items[0])
request.headers['Proxy-Authorization'] = 'Basic ' + user_pass

撰写回答