He estado ejecutando un trabajo cron en Google App Engine durante más de un mes sin problemas. El trabajo hace una variedad de cosas, una es que usa urllib2 para hacer una llamada para recuperar una respuesta json de Reddit así como de algunos otros sitios. Hace aproximadamente dos semanas empecé a ver errores al invocar Reddit, pero no hubo errores al invocar a los otros sitios. El error que estoy recibiendo es HTTP error 429.Error 429 al invocar Reddit api desde Google App Engine
He intentado ejecutar el mismo código fuera de Google App Engine y no tengo ningún problema. Intenté usar urlFetch, pero recibí el mismo error.
Puede ver el error al usar la aplicación engine's interactive shell con el siguiente código.
import urllib2
data = urllib2.urlopen('http://www.reddit.com/r/Music/.json', timeout=60)
Editar: No estoy seguro de por qué siempre falla para mí y no para otra persona. Este es el error que recibo:
>>> import urllib2
>>> data = urllib2.urlopen('http://www.reddit.com/r/Music/.json', timeout=60)
Traceback (most recent call last):
File "/base/data/home/apps/s~shell-27/1.356011914885973647/shell.py", line 267, in get
exec compiled in statement_module.__dict__
File "<string>", line 1, in <module>
File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 400, in open
response = meth(req, response)
File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 513, in http_response
'http', request, response, code, msg, hdrs)
File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 438, in error
return self._call_chain(*args)
File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 372, in _call_chain
result = func(*args)
File "/base/python27_runtime/python27_dist/lib/python2.7/urllib2.py", line 521, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 429: Unknown
código similar que se ejecuta fuera del motor de aplicación sin ningún problema:
print urllib2.urlopen('http://www.reddit.com/r/Music/.json').read()
Al principio pensé que tenía que ver con un problema de tiempo de espera, ya que estaba trabajando originalmente , pero como no hay un error de tiempo de espera sino un código HttpError extraño, no estoy seguro. Alguna idea?
Usar el shell interactivo y el código que ha proporcionado me funciona. – cheeken
Simplemente significa que está haciendo demasiadas solicitudes. No hay nada que puedas hacer como programador. Para evitar estos errores, generalmente puede poner un descanso entre las solicitudes. http://tools.ietf.org/html/draft-nottingham-http-new-status-02#page-4 –
@ user947240: siga los consejos de shadyabhi. – RanRag