8
votes

Erreur proxy Python avec la bibliothèque de demandes

J'essaie d'accéder au Web via un serveur proxy à Python. J'utilise la bibliothèque des demandes et j'ai un problème avec authentification de mon proxy car le proxy que j'utilise nécessite un mot de passe.

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: 'h6f2v6jh5dsxa@77.75.105.165'


1 commentaires

Il est de bonnes manières de marquer les réponses correctes comme correctes


3 Réponses :


15
votes

Vous devez supprimer le nom d'utilisateur et le mot de passe intégré à partir de proxydict code> et d'utiliser le paramètre auth-auth code> à la place.

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)


9 commentaires

Merci, j'ai essayé cela et cela a résolu l'erreur, mais cela ne se connecte toujours pas au proxy. Quand je regarde les en-têtes retournés (R.Headers), l'un d'entre eux est «Connection de proxy»: «Fermer», ce qui semble signifier sa prise trop longtemps pour se connecter au proxy, est-il un moyen d'authentifier avant de demander URL?


@MarkCollier, veuillez essayer le code de modifié de réponse. C'était une erreur dans la première version. Ajouté httpproxyauth , il devrait maintenant fonctionner.


des demandes.auth Import HTTPProxyaTh Traceback (appel le plus récent): Fichier "", ligne 1, dans à partir des demandes.auth Import HTTPProxyaTh Importerror: Impossible d'importer le nom httpproxyauth


@MarkCollier, mise à niveau Demandes : PIP Install Demandes


@MarkCollier, vous voulez dire une erreur de connexion proxy ou ne peut pas importer le nom? J'ai testé ce code sur le serveur de proxy local et cela fonctionne. Lorsque je saisie un mauvais nom d'utilisateur ou mot de passe, r.status_code est 407 . Qu'est-ce qui est à toi?


@MarkCollier, quelles sont vos demandes .__ Version __ ? J'ai 0.9.1 . Peut-être que pip install -pgrade demande a échoué ou que vous testez le code dans une coque interactive, et il a commencé avant la mise à niveau? Essayez de lancer le code du fichier.


Si cela aide, cela a fonctionné pour moi, en utilisant requêtes == 1.1 .


J'ai la même erreur. Je suis avec les demandes version 2.0.0. Toute solution?


Cela a corrigé cela pour moi - mais quelqu'un sait-il pourquoi? La réponse n'est pas très complète.



0
votes

Vous pouvez utiliser la bibliothèque urllib code> pour cela.

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


0 commentaires

3
votes

J'ai eu un problème similaire sur Windows et j'ai trouvé le seul moyen d'obtenir Demandes CODE> Pour que vous puissiez définir les proxies en tant que variables d'environnement avant de commencer Python. Pour vous, ce serait quelque chose comme ceci:

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