3

我想安装几个使用 easy_install 的 python 包。他们在设置脚本中使用 urrlib2 模块。我尝试使用公司代理让 easy_install 下载所需的软件包。因此,为了测试代理连接,我尝试了以下代码。我不需要为 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 包。

4

4 回答 4

17

设置以下环境变量:

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窗口并再次启动命令提示符。然后,您可以使用正常的 setuptoolseasy_installpip下载和安装 Python 包。

如果您需要通过 Python 使用它;requests图书馆负责处理 和httplib的怪癖urllib

requests会自动读取HTTP_PROXY和使用代理;但这是您手动执行的方式(来自文档的示例):

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)
于 2012-08-27T15:15:08.820 回答
2

您可以执行以下命令:

sudo pip --proxy <代理>安装<模块>

于 2018-06-27T06:16:22.650 回答
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

于 2015-02-25T17:35:17.273 回答
-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")

我认为这应该有效。

于 2012-08-27T15:02:00.367 回答