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'
3 Réponses :
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)
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 code>, il devrait maintenant fonctionner.
des demandes.auth Import HTTPProxyaTh Traceback (appel le plus récent): Fichier "
@MarkCollier, mise à niveau Demandes CODE>:
PIP Install Demandes CODE>
@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 code> est
407 code>. Qu'est-ce qui est à toi?
@MarkCollier, quelles sont vos demandes .__ Version __ code>? J'ai
0.9.1 code>. Peut-être que
pip install -pgrade demande code> 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 code>.
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.
Vous pouvez utiliser la bibliothèque urllib code> pour cela.
from urllib import request
request.urlopen("your URL", proxies=request.getproxies())
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
Voir aussi Stackoverflow.com/cevestions / 5971312 / ...
Il est de bonnes manières de marquer les réponses correctes comme correctes