urllib 库一般使用 ProxyHandler 设置代理,参数是字典类型,键名是协议。当创建完 ProxyHandler 对象后,我们可以使用 build_opener()方法创建一个 Opener,此时这个 Opener 已经设置好代理了,我们使用 Opener 的 open()方法打开某个 URL,就会使用代理去访问这个网址。
urllib代理设置代码如下
from urllib.error import URLError from urllib.request import ProxyHandler from urllib.request import build_opener # 通过ProxyHandler来设置代理服务器,参数为字典类型,键名为协议,键值为代理 proxy_handler = ProxyHandler({"http": ":9999", "https":":9999"}) # 创建一个opener对象,比openurl多了一个header opener = build_opener(proxy_handler) try: # 通过opener对象打开url response = opener.open("") print(response.read().decode("utf-8")) except URLError as e: print(e.reason)结果会出现两种情况
[WinError 10061] 由于目标计算机积极拒绝,无法连接。解决方法:主要是代理不可用,更换代理就行
[WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。解决方法:将浏览器的代理设置中的局域网设置,里面的自动配置脚本选项改为自动检测设置即可。
运行结果如下,可以看到origin已经改成了代理IP
{ "args": {}, "headers": { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3", "Accept-Encoding": "gzip, deflate", "Accept-Language": "zh-CN,zh;q=0.9", "Host": "httpbin.org", "Upgrade-Insecure-Requests": "1", "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" }, "origin": "113.120.33.75, 113.120.33.75", "url": "" }