Python: requests.exceptions.ConnectionError. Max rebashs superados con url

Este es el guión:

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} 

Como puede ver, está intentando acceder a una lista de direcciones URL a través de una lista de proxies. Aquí está el archivo urls.txt:

 http://api.exip.org/?call=ip 

Aquí está el archivo proxies.txt:

 {"http":"http://107.17.92.18:8080"} 

Tengo este proxy en www.hidemyass.com. ¿Podría ser un mal proxy? He probado varios y este es el resultado. Nota: si está intentando replicar esto, es posible que deba actualizar el proxy a uno reciente en hidemyass.com. Parece que al final dejan de trabajar. Aquí está el error completo y el rastreo:

 Traceback (most recent call last): File "test.py", line 17, in  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 : '') 

Mirando el seguimiento de stack que ha proporcionado, su error es causado por la excepción httplib.BadStatusLine , que, según los documentos , es:

Se genera si un servidor responde con un código de estado HTTP que no entendemos.

En otras palabras, algo que es devuelto (si es que es devuelto) por el servidor proxy no puede ser analizado por httplib que realiza la solicitud real.

Por mi experiencia con los proxies (de escritura) http, puedo decir que algunas implementaciones pueden no seguir las especificaciones demasiado estrictamente (las especificaciones de rfc en http no son fáciles de leer) o usar hacks para corregir los navegadores antiguos que tienen fallas en su implementación.

Entonces, respondiendo a esto:

¿Podría ser un mal proxy?

… Yo diría que esto es posible. La única forma real de estar seguro es ver qué devuelve el servidor proxy.

Intente depurarlo con el depurador o agarre el detector de paquetes (algo como Wireshark o Network Monitor ) para analizar lo que sucede en la red. Tener información sobre qué es exactamente lo que devuelve el servidor proxy debería darle una clave para resolver este problema.

Tal vez usted está sobrecargando el servidor proxy al enviar demasiadas solicitudes en un corto período de tiempo, dice que obtuvo el proxy de un popular sitio web de proxy gratuito, lo que significa que no es el único que usa ese servidor y que a menudo no es tan fuerte. carga.

Si agrega alguna demora entre sus solicitudes como esta:

 from time import sleep [...] data=requests.get(url, proxies=proxy) data1=data.content print data1 print {'http': line} sleep(1) 

(tenga en cuenta la sleep(1) que detiene la ejecución del código durante un segundo)

Funciona ?

 def hello(self): self.s = requests.Session() self.s.headers.update({'User-Agent': self.user_agent}) return True 

Intenta esto, funcionó para mí 🙂