tumangaonline too significa requests que many error code python http mechanize

python - too - http error 429 paypal



Cómo evitar el error HTTP 429(Demasiadas solicitudes) python (4)

Como dijo MRA, no debes tratar de eludir un 429 Too Many Requests sino que debes manejarlo en consecuencia. Usted tiene varias opciones dependiendo de su caso de uso:

1) Duerme tu proceso . El servidor normalmente incluye un encabezado Retry-after en la respuesta con el número de segundos que se espera que espere antes de volver a intentarlo. Tenga en cuenta que dormir en un proceso puede causar problemas, por ejemplo, en una cola de tareas, donde en su lugar debe volver a intentar la tarea más adelante para liberar al trabajador para otras cosas.

2) Retroceso exponencial . Si el servidor no te dice cuánto tiempo esperar, puedes volver a intentar tu solicitud usando pausas cada vez mayores. La popular cola de tareas Apio tiene esta característica incorporada .

3) Cubo de fichas . Esta técnica es útil si sabe de antemano cuántas solicitudes puede realizar en un momento determinado. Cada vez que accede a la API, primero busca un token del cubo. El cubo se vuelve a llenar a una velocidad constante. Si el depósito está vacío, debes esperar antes de volver a acceder a la API. Por lo general, los segmentos de tokens se implementan en el otro extremo (la API), pero también puede usarlos como proxy para evitar recibir 429 Too Many Requests . La función rate_limit de rate_limit utiliza un algoritmo de depósito de fichas.

Aquí hay un ejemplo de una aplicación de Python / Apio que usa la reducción exponencial y la limitación de velocidad / bloque de token:

class TooManyRequests(Exception): """Too many requests""" @task( rate_limit=''10/s'', autoretry_for=(ConnectTimeout, TooManyRequests,), retry_backoff=True) def api(*args, **kwargs): r = requests.get(''placeholder-external-api'') if r.status_code == 429: raise TooManyRequests()

Estoy tratando de usar Python para iniciar sesión en un sitio web y reunir información de varias páginas web y me aparece el siguiente error:

Traceback (most recent call last): File "extract_test.py", line 43, in <module> response=br.open(v) File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 203, in open return self._mech_open(url, data, timeout=timeout) File "/usr/local/lib/python2.7/dist-packages/mechanize/_mechanize.py", line 255, in _mech_open raise response mechanize._response.httperror_seek_wrapper: HTTP Error 429: Unknown Response Code

time.sleep() y funciona, pero parece poco inteligente y poco confiable, ¿hay alguna otra forma de evitar este error?

Aquí está mi código:

import mechanize import cookielib import re first=("example.com/page1") second=("example.com/page2") third=("example.com/page3") fourth=("example.com/page4") ## I have seven URL''s I want to open urls_list=[first,second,third,fourth] br = mechanize.Browser() # Cookie Jar cj = cookielib.LWPCookieJar() br.set_cookiejar(cj) # Browser options br.set_handle_equiv(True) br.set_handle_redirect(True) br.set_handle_referer(True) br.set_handle_robots(False) # Log in credentials br.open("example.com") br.select_form(nr=0) br["username"] = "username" br["password"] = "password" br.submit() for url in urls_list: br.open(url) print re.findall("Some String")


Escribir este fragmento de código solucionó mi problema:

requests.get(link, headers = {''User-agent'': ''your bot 0.1''})


Otra solución alternativa sería suplantar su IP utilizando algún tipo de red Pública VPN o Tor. Esto supondría la limitación de velocidad en el servidor a nivel de IP.

Hay una breve publicación en el blog que muestra una forma de usar tor junto con urllib2:

http://blog.flip-edesign.com/?p=119


Recibir un estado 429 no es un error , es el otro servidor "amablemente" que le pide que detenga las solicitudes de correo no deseado. Obviamente, su tasa de solicitudes ha sido demasiado alta y el servidor no está dispuesto a aceptar esto.

No debe tratar de "esquivar" esto, o incluso tratar de eludir la configuración de seguridad del servidor al intentar falsificar su IP, simplemente debe respetar la respuesta del servidor al no enviar demasiadas solicitudes.

Si todo está configurado correctamente, también habrá recibido un encabezado "Reintentar después" junto con la respuesta 429. Este encabezado especifica la cantidad de segundos que debe esperar antes de realizar otra llamada. La forma correcta de lidiar con este "problema" es leer este encabezado y dormir su proceso durante tantos segundos.

Puede encontrar más información sobre el estado 429 aquí: http://tools.ietf.org/html/rfc6585#page-3