2012-01-14 76 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