urllib.request.urlopen不识别proxies关键字参数是写法过时还是代码错误?
问题原因
- 报错的核心原因是
urllib.request.urlopen方法本身不支持proxies关键字参数,你看到的常见传proxies参数的用法,是第三方网络库requests的调用逻辑,两个库的代理配置规则完全不同,属于用法混淆导致的问题。
正确实现方案(urllib配置代理)
urllib需要先通过ProxyHandler封装代理规则,再构建专属的请求实例发起调用,示例代码如下:
import urllib.request # 配置代理规则 proxy_handler = urllib.request.ProxyHandler({ "http": "37.26.86.206", "https": "37.26.86.206" }) # 构建带代理的请求opener proxy_opener = urllib.request.build_opener(proxy_handler) # 使用opener发起请求 response = proxy_opener.open(input()) print(response)
如果需要全局生效,让后续所有urllib.request.urlopen调用都默认走该代理,可以额外安装全局opener:
urllib.request.install_opener(proxy_opener) # 此时调用urlopen会自动使用配置好的代理 response = urllib.request.urlopen(input()) print(response)
内容的提问来源于stack exchange,提问作者MLG Herobrine
相关产品推荐
相关产品推荐

