首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >urllib3 -无法设置http代理

urllib3 -无法设置http代理
EN

Stack Overflow用户
提问于 2012-09-20 01:38:03
回答 1查看 11.6K关注 0票数 1

我正在尝试维护到代理的连接池。我的代码如下所示:

代码语言:javascript
复制
>>> from urllib3 import PoolManager
>>> pool = PoolManager(10)
>>> pool.urlopen('GET', 'http://http-server/index.html',fields=None,headers=None,encode_multipart=False,multipart_boundary=None,proxies={'http': 'http://proxy'})

当我运行这段代码时,它失败了:

代码语言:javascript
复制
> 
> Traceback (most recent call last):
>   File "<stdin>", line 1, in   <module>
>   File "urllib3/poolmanager.py", line 117, in urlopen
>     response = conn.urlopen(method, u.request_uri, **kw)
> File "urllib3/connectionpool.py", line 427, in urlopen
>     **response_kw)   
> File "urllib3/response.py", line 195, in from_httplib
>     **response_kw) 
> TypeError: __init__() got an unexpected keyword argument 'proxies'

你知道我做错了什么吗?根据urllib3文档,关键字args被发送到urlopen,但在这种情况下看起来并没有发生。

这里是urllib的链接,描述了代理关键字arg的用法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-20 01:55:59

您链接到的文档指向Python的urllib,它是一个与urllib3不同的库。当你调用urllib3的urlopen时,这和urllib的urlopen是不一样的。:)

目前,将代理与urllib3一起使用还没有很好的文档。如果您想探索urllib3代码,请看一下urllib3.poolmanager.ProxyManager.

否则,我建议尝试在urllib3之上简化代理功能的请求。请参阅:http://docs.python-requests.org/en/latest/user/advanced/?highlight=proxy#proxies

您的代码将如下所示。

代码语言:javascript
复制
>>> import requests
>>> requests.get('http://http-server/index.html', proxies={'http': 'http://proxy'})

如果您仍然更喜欢使用urllib3,那么使用ProxyManager将如下所示:

代码语言:javascript
复制
>>> import urllib3
>>> http = urllib3.proxy_from_url('http://myproxy.com/')  # This returns a ProxyManager object which has the same API as other ConnectionPool objects.
>>> r = http.request('GET', 'http://http-server/index.html')

您也可以直接创建自己的ProxyManager对象,但我更喜欢使用proxy_from_url快捷方式。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12500014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档