2012-01-14 13 views
5

Estoy intentando acceder a la web a través de un servidor proxy en Python. Estoy usando la biblioteca de solicitudes y tengo un problema con la autenticación de mi proxy, ya que el proxy que estoy usando requiere una contraseña.Error de proxy de Python con la biblioteca de solicitudes

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

estoy consiguiendo el error siguiente:

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

¿Cómo puedo solucionar esto?

Gracias de antemano por su ayuda.

+1

Es de buena educación para marcar las respuestas correctas sean más exactas – Sheena

Respuesta

15

debe quitar el nombre de usuario y contraseña incrustado desde proxyDict, y utilizar el parámetro auth lugar.

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

Gracias, lo he intentado y se solucionó el error, pero todavía no se conecta al proxy. Cuando miro los encabezados devueltos (r.headers), uno de ellos es 'proxy-connection': 'close', que parece significar que tarda demasiado en conectarse al proxy, ¿hay alguna manera de autenticarse antes solicitando alguna URL? –

+0

@MarkCollier, intente con el código de la respuesta editada. Fue un error en la primera versión. Se agregó 'HTTPProxyAuth', ahora debería funcionar. – reclosedev

+0

de importación requests.auth HTTPProxyAuth Rastreo (llamada más reciente pasado): Archivo "", línea 1, en de importación requests.auth HTTPProxyAuth ImportError: No se puede importar el nombre HTTPProxyAuth –

0

Puede usar la biblioteca urllib para esto.

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

He tenido un problema similar en Windows y encontró la única manera de conseguir requests de trabajo fue establecer los proxies como variables de entorno antes de empezar a Python. Para que esto sería algo como esto:

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

Es posible que también desee comprobar es que hay un puerto específico requerido, y si es así la pusieron después de la URL. Por ejemplo, si el puerto es 8443 y luego hacer:

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

ver también https://stackoverflow.com/questions/5971312/how-to-set-environment-variables-in-python – raphael

Cuestiones relacionadas