2012-01-14 33 views
5

Tôi đang cố truy cập web thông qua máy chủ proxy bằng Python. Tôi đang sử dụng thư viện yêu cầu và tôi đang gặp sự cố khi xác thực proxy của mình vì proxy mà tôi đang sử dụng yêu cầu mật khẩu.Lỗi proxy Python với thư viện yêu cầu

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

Tôi nhận được lỗi sau:

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]' 

Làm thế nào để giải quyết này?

Cảm ơn trước sự giúp đỡ của bạn.

+1

Cách tốt để đánh dấu câu trả lời đúng là đúng – Sheena

Trả lời

15

Bạn nên xóa tên người dùng và mật khẩu được nhúng từ proxyDict và sử dụng thông số auth thay thế.

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

Cảm ơn bạn đã khắc phục lỗi nhưng vẫn không kết nối với proxy. Khi tôi nhìn vào tiêu đề được trả lại (r.headers), một trong số chúng là 'proxy-connection': 'close', có vẻ như mất quá nhiều thời gian để kết nối với proxy, có cách xác thực trước không yêu cầu bất kỳ URL nào? –

+0

@MarkCollier, vui lòng thử mã từ câu trả lời đã chỉnh sửa. Đó là lỗi Trong phiên bản đầu tiên. Đã thêm 'HTTPProxyAuth', bây giờ nó sẽ hoạt động. – reclosedev

+0

từ requests.auth nhập khẩu HTTPProxyAuth Traceback (cuộc gọi gần đây nhất cuối cùng): File "", dòng 1, trong từ requests.auth nhập khẩu HTTPProxyAuth ImportError: không thể nhập tên HTTPProxyAuth –

0

Bạn có thể sử dụng thư viện urllib cho việc này.

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

Tôi đã gặp vấn đề tương tự như trên Windows và tìm thấy con đường duy nhất để có được requests làm việc là để thiết lập proxy như biến môi trường trước khi tôi bắt đầu Python. Đối với bạn, đây sẽ là một cái gì đó như thế này:

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

Bạn cũng có thể muốn kiểm tra là có một cổng cụ thể được yêu cầu và nếu đặt sau url. Ví dụ: nếu cổng là 8443 thì hãy thực hiện:

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

cũng xem https://stackoverflow.com/questions/5971312/how-to-set-environment-variables-in-python – raphael

Các vấn đề liên quan