2

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

我当前的脚本如下所示:

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")

挂起curlwget超时。

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

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

4

1 回答 1

3

像这样的挫折是促使我使用Requests的原因。如果您正在使用 urllib2 进行大量工作,那么您真的应该检查一下。例如,要使用 Requests 执行您希望执行的操作,您可以编写:

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
于 2013-02-18T07:08:28.107 回答