Python: les demandes.des exceptions.ConnectionError. Max tentatives de dépassement avec l'url
C'est le script:
import requests
import json
import urlparse
from requests.adapters import HTTPAdapter
s = requests.Session()
s.mount('http://', HTTPAdapter(max_retries=1))
with open('proxies.txt') as proxies:
for line in proxies:
proxy=json.loads(line)
with open('urls.txt') as urls:
for line in urls:
url=line.rstrip()
data=requests.get(url, proxies=proxy)
data1=data.content
print data1
print {'http': line}
comme vous pouvez le voir, sa tentez d'accéder à une liste d'url par le biais d'une liste de proxies. Ici, c'est le urls.txt fichier:
http://api.exip.org/?call=ip
ici est la proxies.txt fichier:
{"http":"http://107.17.92.18:8080"}
J'ai eu cette procuration à www.hidemyass.com. Pourrait-il être une mauvaise proxy? J'ai essayé plusieurs et c'est le résultat. Remarque: si vous essayez de reproduire cela, vous devrez mettre à jour le proxy de un récent au hidemyass.com. Ils semblent cesser de fonctionner par la suite.
voici le message d'erreur et traceback:
Traceback (most recent call last):
File "test.py", line 17, in <module>
data=requests.get(url, proxies=proxy)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get
return request('get', url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 335, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 454, in send
history = [resp for resp in gen] if allow_redirects else []
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 144, in resolve_redirects
allow_redirects=False,
File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 438, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 327, in send
raise ConnectionError(e)
requests.exceptions.ConnectionError: HTTPConnectionPool(host=u'219.231.143.96', port=18186): Max retries exceeded with url: http://www.google.com/ (Caused by <class 'httplib.BadStatusLine'>: '')
- Est la mise en retrait dans votre exemple, correct?
- Je crois que oui, pourquoi?
- Parce que le corps de votre
for
les boucles ne sont pas en retrait. Qui semble comme il avait soulever une IndentationError pour moi. - oh, mince, votre droit. J'ai copié le code de mal. La question est toujours debout mais.
- Vos boucles sont toujours pas droit. Le code actuel ne jamais utiliser la dernière proxy répertorié dans proxies.txt.
- J'ai exactement erreur avec mon Fai proxy. J'ai vu le problème uniquement avec une url spécifique (requête POST). Je peux faire la demande par la désactivation du proxy:
proxies={'https':None}
(en https).
Vous devez vous connecter pour publier un commentaire.
À la recherche à la trace de la pile que vous avez fournis, votre erreur est provoquée par
httplib.BadStatusLine
exception, qui, selon docs, est:En d'autres termes, quelque chose qui est de retour (si retour à tous) par le serveur proxy ne peut pas être analysé par httplib qui ne demande réelle.
De mon expérience avec (par écrit) les proxys http, je peux dire que certaines implémentations ne respectent pas les specs de manière trop stricte (rfc specs sur http ne sont pas faciles à lire, en fait) ou d'utiliser des hacks pour fixer les vieux navigateurs qui ont des lacunes dans leur mise en œuvre.
Donc, de répondre à cette:
... Je dirais que c'est possible. La seule véritable façon de être sûr, c'est de voir ce qui est retourné par le serveur proxy.
Essayez de déboguer avec le débogueur ou prenez un renifleur de paquets (quelque chose comme Wireshark ou Le Moniteur Réseau) pour analyser ce qui se passe dans le réseau. Avoir des info sur ce qui est retourné par le serveur proxy devrait vous donner une clé pour résoudre ce problème.
httplib.BadStatusLine
exception soulevée quelque part avant ("Causé par les [...]" partie de message d'erreur). Notez qu'il n'y a pas d'info sur la raison pour laquellehttplib.BadStatusLine
a été soulevée (à l'exception de la documentation).HTTPConnectionPool(..)
est un faux. N'importe qui avec des solutions pour moi et ceux qui à l'avenir?Peut-être que vous êtes de surcharger le serveur proxy en envoyant trop de demandes dans un court laps de temps, vous dites que vous avez obtenu le proxy à partir d'un populaire proxy gratuit site ce qui signifie que vous n'êtes pas le seul à utiliser ce serveur et c'est souvent sous une lourde charge.
Si vous ajoutez un peu de délai entre votre demande comme ceci :
(note de l'
sleep(1)
qui suspend l'exécution du code pour une seconde)Ça fonctionne ?
Essayer cela,Il a travaillé pour moi 🙂