2012-01-14 78 views
5

我试图通过Python中的代理服务器访问网络。我正在使用请求库,因为我使用的代理需要密码,所以我在验证代理时遇到问题。请求库中的Python代理错误

proxyDict = { 
      'http' : 'username:[email protected]', 
      'https' : 'username:[email protected]' 
     } 
r = requests.get("http://www.google.com", proxies=proxyDict) 

我收到以下错误:

Traceback (most recent call last): 
File "<pyshell#13>", line 1, in <module> 
r = requests.get("http://www.google.com", proxies=proxyDict) 
File "C:\Python27\lib\site-packages\requests\api.py", line 78, in get 
:param url: URL for the new :class:`Request` object. 
File "C:\Python27\lib\site-packages\requests\api.py", line 65, in request 
"""Sends a POST request. Returns :class:`Response` object. 
File "C:\Python27\lib\site-packages\requests\sessions.py", line 187, in request 
def head(self, url, **kwargs): 
File "C:\Python27\lib\site-packages\requests\models.py", line 407, in send 
""" 
File "C:\Python27\lib\site-packages\requests\packages\urllib3\poolmanager.py", line  127, in proxy_from_url 
File "C:\Python27\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 521, in connection_from_url 
File "C:\Python27\lib\site-packages\requests\packages\urllib3\connectionpool.py", line 497, in get_host 
ValueError: invalid literal for int() with base 10: '[email protected]' 

如何解决这个问题?

在此先感谢您的帮助。

+1

这是很好的方式来标记正确答案为正确 – Sheena 2013-08-26 11:40:07

回答

15

您应该从proxyDict中删除嵌入的用户名和密码,并改用auth参数。

import requests 
from requests.auth import HTTPProxyAuth 

proxyDict = { 
      'http' : '77.75.105.165', 
      'https' : '77.75.105.165' 
     } 
auth = HTTPProxyAuth('username', 'mypassword') 

r = requests.get("http://www.google.com", proxies=proxyDict, auth=auth) 
+0

谢谢,我试过了,它解决了这个错误,但仍无法连接到代理。 当我查看返回的头文件(r.headers)时,其中一个是'proxy-connection':'close',这似乎意味着连接代理需要很长时间,有没有办法在之前进行身份验证请求任何网址? – 2012-01-14 14:05:12

+0

@MarkCollier,请尝试编辑答案的代码。这是第一版中的错误。增加了'HTTPProxyAuth',现在它应该可以工作。 – reclosedev 2012-01-14 14:11:07

+0

从requests.auth进口HTTPProxyAuth 回溯(最近通话最后一个): 文件 “”,1号线,在 从requests.auth进口HTTPProxyAuth 导入错误:无法导入名称HTTPProxyAuth – 2012-01-14 14:16:12

0

您可以使用urllib这个库。

from urllib import request 
request.urlopen("your URL", proxies=urllib.getproxies()) 
2

我一直有在Windows类似的问题,并找到致富requests工作的唯一方法是设置代理服务器作为环境变量之前,我开始了Python。对于你,这将是这样的:

set HTTP_PROXY=http://77.75.105.165 
set HTTPS_PROXY=https://77.75.105.165 

您可能还需要检查是有需要的特定端口,如果是这样的URL后设置。例如,如果该端口是8443然后执行:

set HTTP_PROXY=http://77.75.105.165:8443 
set HTTPS_PROXY=https://77.75.105.165:8443 
+0

另请参阅https://stackoverflow.com/questions/5971312/how-to-set-environment-variables-in-python – raphael 2017-09-19 22:21:59