我想安装一些使用easy_install的python包。他们在设置脚本中使用urrlib2模块。我尝试使用公司代理让easy_install下载所需的软件包。因此,为了测试代理conn,我尝试了以下代码。我不需要在IE中提供任何代理凭证。
proxy = urllib2.ProxyHandler({"http":"http://mycompanyproxy-as-in-IE:8080"})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
site = urllib2.urlopen("http://google.com")
Error:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\urllib2.py", line 126, in
return _opener.open(url, data, timeout)
File "C:\Python27\lib\urllib2.py", line 406, in
response = meth(req, response)
File "C:\Python27\lib\urllib2.py", line 519, in
'http', request, response, code, msg, hdrs)
File "C:\Python27\lib\urllib2.py", line 444, in
return self._call_chain(*args)
File "C:\Python27\lib\urllib2.py", line 378, in
result = func(*args)
File "C:\Python27\lib\urllib2.py", line 527, in
raise HTTPError(req.get_full_url(), code, msg
urllib2.HTTPError: HTTP Error 407: AuthorizedOnly
我的代码有问题吗?或是代理不允许从python进程连接?我可以通过设置代理来安装R包。
答案 0 :(得分:15)
设置以下环境变量:
HTTP_PROXY=http://user:password@your-company-proxy.com:8080
以及
HTTPS_PROXY=http://user:password@your-company-proxy.com:8080
如果您的代理端口不是8080,您也应该使用相应的端口号更改8080 如果您无权修改全局系统变量(只有拥有本地管理员权限才能执行此操作),只需将其添加到用户级变量即可。
从My Computer > Properties > Advanced > Environment Variables
设置(或在Windows 7中为“高级属性”)
设置该变量后,关闭所有cmd
窗口并再次启动命令提示符。然后,您可以使用普通的setuptools easy_install
和pip
来下载和安装Python包。
如果你需要通过Python使用它; requests
库会处理httplib
和urllib
的怪癖。
requests
会自动阅读HTTP_PROXY
并使用代理;但是这里是你如何手动完成的(例如来自docs):
import requests
proxies = {
"http": "http://user:pass@foo.bar.zoo:8080",
"https": "http://user:pass@foo.bar.zoo:8080",
}
requests.get("http://example.org", proxies=proxies)
答案 1 :(得分:1)
您可以执行以下命令:
sudo pip --proxy <代理>安装<模块>
答案 2 :(得分:0)
通过Windows cmd / PowerShell使用setx http_proxy和https_proxy工作。
只需设置http_proxy就不够了。
如上所述,但为Windows配置:
setx HTTP_PROXY http://user:password@your-company-proxy.com:8080
以及
setx HTTPS_PROXY http://user:password@your-company-proxy.com:8080
答案 3 :(得分:-1)
错误说您还需要授权。 请尝试以下代码:
proxy = urllib2.ProxyHandler({"http":"http://mycompanyproxy-as-in-IE:8080"})
proxy_auth_handler = urllib2.HTTPBasicAuthHandler()
proxy_auth_handler.add_password('realm', 'host', 'username', 'password')
opener = build_opener(proxy, proxy_auth_handler)
urllib2.install_opener(opener)
site = urllib2.urlopen("http://google.com")
我认为这应该有用。