requests libreria how headers python python-requests

libreria - requests python post



Max reintentos superados con URL (6)

Estoy intentando obtener el contenido de esta url " https://itunes.apple.com/in/genre/ios-business/id6000?mt=8 " y muestra este error

Traceback (most recent call last): File "/home/preetham/Desktop/eg.py", line 17, in <module> page1 = requests.get(ap) 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 383, in request resp = self.send(prep, **send_kwargs) File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 486, in send r = adapter.send(request, **kwargs) File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 378, in send raise ConnectionError(e) requests.exceptions.ConnectionError: HTTPSConnectionPool(host=''itunes.apple.com'', port=443): Max retries exceeded with url: /in/app/adobe-reader/id469337564?mt=8 (Caused by <class ''socket.gaierror''>: [Errno -2] Name or service not known)

el codigo es

url="https://itunes.apple.com/in/genre/ios-business/id6000?mt=8" page = requests.get(url) tree = html.fromstring(page.text) flist=[] plist=[] for i in range(0,100): app = tree.xpath("//div[@class=''column first'']/ul/li/a/@href") ap=app[0] page1 = requests.get(ap)

Cuando intento el rango con (0,2) funciona, pero cuando pongo el rango en 100, muestra este error.


Lo que sucedió aquí es que el servidor de iTunes rechaza tu conexión (estás enviando demasiadas solicitudes desde la misma dirección IP en un corto período de tiempo)

Reintentos máximos excedidos con url: / in / app / adobe-reader / id469337564? Mt = 8

el seguimiento de errores es engañoso, debería ser algo así como "No se pudo establecer conexión porque la máquina de destino lo rechazó activamente" .

Hay un problema en Python.requests lib en Github, échale un vistazo here

Para superar este problema (no es tanto un problema, ya que es un seguimiento de depuración engañoso), debe capturar las excepciones relacionadas con la conexión de esta manera:

try: page1 = requests.get(ap) except requests.exceptions.ConnectionError: r.status_code = "Connection refused"

Otra forma de superar este problema es si usa el espacio de tiempo suficiente para enviar solicitudes al servidor, esto puede lograrse mediante la función de sleep(timeinsec) en python (no se olvide de importar suspensión)

from time import sleep

Todo en todos los pedidos es impresionante libra de Python, espero que resuelva su problema.


Siempre es bueno implementar el manejo de excepciones. No solo ayuda a evitar la salida inesperada de secuencias de comandos, sino que también ayuda a registrar errores y notificaciones de información. Cuando utilizo solicitudes de Python, prefiero capturar excepciones como esta:

try: res = requests.get(adress,timeout=30) except requests.ConnectionError as e: print("OOPS!! Connection Error. Make sure you are connected to Internet. Technical Details given below./n") print(str(e)) renewIPadress() continue except requests.Timeout as e: print("OOPS!! Timeout Error") print(str(e)) renewIPadress() continue except requests.RequestException as e: print("OOPS!! General Error") print(str(e)) renewIPadress() continue except KeyboardInterrupt: print("Someone closed the program")

Aquí renewIPadress () es una función de definición de usuario que puede cambiar la dirección IP si se bloquea. Puedes irte sin esta función.


Solo haz esto,

Pegue el siguiente código en lugar de page = requests.get(url) :

import time page = '''' while page == '''': try: page = requests.get(url) break except: print("Connection refused by the server..") print("Let me sleep for 5 seconds") print("ZZzzzz...") time.sleep(5) print("Was a nice sleep, now let me continue...") continue

De nada :)


Solo usa requests'' características de requests'' :

import requests from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry session = requests.Session() retry = Retry(connect=3, backoff_factor=0.5) adapter = HTTPAdapter(max_retries=retry) session.mount(''http://'', adapter) session.mount(''https://'', adapter) session.get(url)

Esto GET la URL y reintentará 3 veces en caso de requests.exceptions.ConnectionError . backoff_factor ayudará a aplicar retrasos entre intentos para evitar fallar nuevamente en caso de una cuota de solicitud periódica.

Eche un vistazo a requests.packages.urllib3.util.retry.Retry , tiene muchas opciones para simplificar los reintentos.


Tuve el mismo problema y encontré la solución más fácil para mi caso. Trate de reemplazar esto:

url="https://itunes.apple.com/in/genre/ios-business/id6000?mt=8"

Con este:

url="http://itunes.apple.com/in/genre/ios-business/id6000?mt=8"

La diferencia es "s" en el protocolo. Esto solucionó mi problema.