2012-01-14 19 views
5

Sto tentando di accedere al web tramite un server proxy in Python. Sto utilizzando la libreria delle richieste e sto riscontrando un problema con l'autenticazione del mio proxy in quanto il proxy che sto utilizzando richiede una password.Errore proxy Python con libreria richieste

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

Sto ottenendo il seguente errore:

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

Come posso risolvere questo?

Grazie in anticipo per il vostro aiuto.

+1

E 'buona educazione per contrassegnare le risposte corrette come corrette – Sheena

risposta

15

È necessario rimuovere il nome utente e la password incorporati da proxyDict e utilizzare invece il parametro 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

Grazie, ho provato e che risolto l'errore, ma ancora non si connette al proxy. Quando guardo le intestazioni restituite (r.headers), una di queste è 'proxy-connection': 'close', che sembra significare che impiega troppo tempo per connettersi al proxy, c'è un modo per autenticarsi prima richiesta di URL? –

+0

@MarkCollier, prova il codice dalla risposta modificata. Era un errore nella prima versione. Aggiunto 'HTTPProxyAuth', ora dovrebbe funzionare. – reclosedev

+0

da importazione requests.auth HTTPProxyAuth Traceback (chiamata più recente scorso): file "", linea 1, in da importazione requests.auth HTTPProxyAuth ImportError: Non è possibile importare nome HTTPProxyAuth –

0

È possibile utilizzare la libreria urllib per questo.

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

Ho avuto un problema simile su Windows e hanno trovato l'unico modo per ottenere requests al lavoro è stato quello di impostare i proxy come variabili di ambiente prima ho iniziato Python. Per voi questo sarebbe qualcosa di simile:

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

Si potrebbe anche voler controllare è che c'è una porta specifica richiesta, e in tal caso impostarlo dopo l'URL. Ad esempio, se la porta è 8443 poi fare:

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

vedere anche https://stackoverflow.com/questions/5971312/how-to-set-environment-variables-in-python – raphael

Problemi correlati