通过代理使用 urllib2

2024-01-02

我正在尝试使用urllib2通过代理;然而,在尝试了使用传递我的验证详细信息的几乎所有变体之后urllib2,我要么收到一个永远挂起且不返回任何内容的请求,要么收到407 Errors。我可以使用我的浏览器连接到网络,该浏览器连接到 prox-pac 并相应地重定向;但是,我似乎无法通过命令行执行任何操作curl, wget, urllib2等等,即使我使用 prox-pac 重定向到的代理。我尝试使用以下命令将代理设置为 pac 文件中的所有代理urllib2,这些都不起作用。

我当前的脚本如下所示:

import urllib2 as url

proxy = url.ProxyHandler({'http': 'username:[email protected] /cdn-cgi/l/email-protection: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 or wget超时。

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

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


像这样的挫折促使我使用Requests http://python-requests.org。如果您正在使用 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

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

s = requests.Session(proxies=proxy, auth=auth)
r = s.get('http://www.google.com/')
print r.text
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过代理使用 urllib2 的相关文章

随机推荐