我正在尝试通过代理使用urllib2;然而,在尝试了几乎所有使用urllib2传递验证详细信息的变体之后,我要么得到一个永远挂起的请求,要么什么也不返回,或者得到407 Errors。我可以很好地使用浏览器连接到代理程序包并相应地重定向;但是,即使我使用代理程序重定向到的代理服务器,我似乎也无法通过命令行curl、wget、urllib2等执行任何操作。我尝试使用urllib2将我的代理设置为pac-file中的所有代理,但都不起作用。
我当前的脚本如下所示:
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和我也尝试过:
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")它就像curl或wget超时一样挂起。
我需要做什么来诊断问题?我怎么可能通过我的浏览器连接,而不是从同一台计算机上的命令行连接,使用似乎相同的代理和凭据?
会不会与路由器有关?如果是,它如何区分浏览器HTTP请求和命令行HTTP请求?
发布于 2013-02-18 15:08:28
这样的挫折驱使我使用Requests。如果你正在使用urllib2做大量的工作,你真的应该去看看它。例如,要使用请求做您想做的事情,您可以这样写:
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!):
s = requests.Session(proxies=proxy, auth=auth)
r = s.get('http://www.google.com/')
print r.texthttps://stackoverflow.com/questions/14928385
复制相似问题