题 Python 3 - urllib,HTTP错误407:需要代理身份验证


我正在尝试使用urllib.request.urlopen()打开一个网站(我在公司代理的后面),但我收到错误:

urllib.error.HTTPError: HTTP Error 407: Proxy Authentication Required

我可以在urllib.request.getproxies()中找到代理,但是如何指定用于它的用户名和密码?我在官方文档中找不到解决方案。


13
2017-08-01 15:53


起源


你见过吗? stackoverflow.com/questions/34079/...?底部的例子 docs.python.org/library/urllib2.html#urllib2-examples。 - Katriel
是的,但这是针对Python2.7他们没有重组Python3 3中的整个urllib包吗? - Lanaru
他们没有从根本上改变界面 - 只是稍微改变了一下。 ProxyHandler 现在住在 urllib.request.ProxyHandler - Katriel


答案:


import urllib.request as req

proxy = req.ProxyHandler({'http': r'http://username:password@url:port'})
auth = req.HTTPBasicAuthHandler()
opener = req.build_opener(proxy, auth, req.HTTPHandler)
req.install_opener(opener)
conn = req.urlopen('http://google.com')
return_str = conn.read()

22
2017-08-01 16:12



谢谢。没有提供用户名和密码,有没有办法做到这一点? - tommy.carstensen
如果您担心在源代码中硬编码凭证(从而泄漏到git或其他VCS工件等等),那么最好的方法是使用configparser或YAML或JSON之类的东西来存储凭据在他们自己的单独文件中。从配置设置动态构建ProxyHandler URL。这允许您的源可读,同时保持凭证机密。 - Jim Dennis
一个小注:对我来说,他有“@url:port”,我实际上使用了机器名“@machine:port”,而不是一个完整的URL。 - mcherm
我正在使用Python 2.7,这看起来怎么样?我必须使用urllib2吗? - FancyDolphin
这太棒了,谢谢! - fndg87