Tôi đã chạy một công việc định kỳ trên Google App Engine trong hơn một tháng mà không gặp bất kỳ sự cố nào. Công việc làm nhiều thứ, một là nó sử dụng urllib2 để thực hiện một cuộc gọi để lấy một phản ứng json từ Reddit cũng như một vài trang web khác. Khoảng hai tuần trước, tôi bắt đầu thấy lỗi khi gọi Reddit, nhưng không có lỗi khi gọi các trang web khác. Lỗi tôi nhận được là lỗi HTTP 429.Lỗi 429 khi gọi API Reddit từ Google App Engine
Tôi đã thử thực thi cùng một mã bên ngoài Google App Engine và không có bất kỳ sự cố nào. Tôi đã thử sử dụng urlFetch, nhưng nhận được lỗi tương tự.
Bạn có thể thấy lỗi khi sử dụng ứng dụng engine's interactive shell bằng mã sau.
import urllib2
data = urllib2.urlopen('http://www.reddit.com/r/Music/.json', timeout=60)
Chỉnh sửa: Không chắc chắn tại sao nó luôn thất bại đối với tôi chứ không phải ai khác. Đây là lỗi mà tôi nhận được:
>>> 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
mã tương tự như chạy bên ngoài của động cơ ứng dụng không có vấn đề:
print urllib2.urlopen('http://www.reddit.com/r/Music/.json').read()
Lúc đầu, tôi nghĩ rằng nó đã phải làm với một vấn đề thời gian chờ vì nó ban đầu được làm việc , nhưng vì không có lỗi hết thời gian chờ nhưng một mã HttpError lạ, tôi không chắc chắn. Bất kỳ ý tưởng nào?
Sử dụng trình bao tương tác và mã bạn đã cung cấp cho tôi. – cheeken
Điều đó có nghĩa là bạn đang thực hiện quá nhiều yêu cầu. Không có gì bạn có thể làm như một lập trình viên. Để tránh những lỗi này, bạn thường có thể đặt một giấc ngủ giữa các yêu cầu. http://tools.ietf.org/html/draft-nottingham-http-new-status-02#page-4 –
@ user947240: theo lời khuyên của shadyabhi. – RanRag