首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过代理使用urllib2

通过代理使用urllib2
EN

Stack Overflow用户
提问于 2013-02-18 09:54:56
回答 1查看 5.1K关注 0票数 2

我正在尝试通过代理使用urllib2;然而,在尝试了几乎所有使用urllib2传递验证详细信息的变体之后,我要么得到一个永远挂起的请求,要么什么也不返回,或者得到407 Errors。我可以很好地使用浏览器连接到代理程序包并相应地重定向;但是,即使我使用代理程序重定向到的代理服务器,我似乎也无法通过命令行curlwgeturllib2等执行任何操作。我尝试使用urllib2将我的代理设置为pac-file中的所有代理,但都不起作用。

我当前的脚本如下所示:

代码语言:javascript
复制
import urllib2 as url

proxy = url.ProxyHandler({'http': 'username:password@my.proxy:8080'})
auth = url.HTTPBasicAuthHandler()
opener = url.build_opener(proxy, auth, url.HTTPHandler)
url.install_opener(opener)
url.urlopen("http://www.google.com/")

这抛出了HTTP Error 407: Proxy Authentication Required和我也尝试过:

代码语言:javascript
复制
import urllib2 as url

handlePass = url.HTTPPasswordMgrWithDefaultRealm()
handlePass.add_password(None, "http://my.proxy:8080", "username", "password")
auth_handler = url.HTTPBasicAuthHandler(handlePass)
opener = url.build_opener(auth_handler)
url.install_opener(opener)
url.urlopen("http://www.google.com")

它就像curlwget超时一样挂起。

我需要做什么来诊断问题?我怎么可能通过我的浏览器连接,而不是从同一台计算机上的命令行连接,使用似乎相同的代理和凭据?

会不会与路由器有关?如果是,它如何区分浏览器HTTP请求和命令行HTTP请求?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-18 15:08:28

这样的挫折驱使我使用Requests。如果你正在使用urllib2做大量的工作,你真的应该去看看它。例如,要使用请求做您想做的事情,您可以这样写:

代码语言:javascript
复制
import requests
from requests.auth import HTTPProxyAuth

proxy = {'http': 'http://my.proxy:8080'}
auth = HTTPProxyAuth('username', 'password')
r = requests.get('http://wwww.google.com/', proxies=proxy, auth=auth)
print r.text

或者,您可以将其包装在一个会话对象中,并且每个请求将自动使用代理信息(另外,它将自动存储和处理cookie!):

代码语言:javascript
复制
s = requests.Session(proxies=proxy, auth=auth)
r = s.get('http://www.google.com/')
print r.text
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14928385

复制
相关文章

相似问题

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