Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GAE - AppEngine - DeadlineExceededError: Deadline exceeded while waiting for HTTP response from URL:

I have a Google AppEngine application which runs great on my local machine. The app posts a image (from a url) to my facebook wall. However, when I deploy it to Google's servers, I get an error:

DeadlineExceededError: Deadline exceeded while waiting for HTTP response from URL: 

The offending code is:

facebook_access_token = facebook_info['access_token']

facebook_post_url = 'https://graph.facebook.com/me/photos?access_token=%s&url=%s&name=%s&method=post' % (facebook_access_token, url, caption)
facebook_post_url = facebook_post_url.replace(" ", "+");
facebook_result = urlfetch.fetch(facebook_post_url)

if facebook_result.status_code == 200:
  facebook_result_object = json.loads(facebook_result.content) 
  output_ids['facebook'] = facebook_result_object['id']
else:
  output_ids['facebook'] = ''

Ans the full error trace is:

Traceback (most recent call last):
  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 710, in __call__
    handler.get(*groups)
  File "/base/data/home/apps/s~digibackapi/1.362663258877230387/main.py", line 512, in get
    facebook_result = urlfetch.fetch(facebook_post_url)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 266, in fetch
    return rpc.get_result()
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py", line 604, in get_result
    return self.__get_result_hook(self)
  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/urlfetch.py", line 404, in _get_fetch_result
    'Deadline exceeded while waiting for HTTP response from URL: ' + url)
DeadlineExceededError: Deadline exceeded while waiting for HTTP response from URL: https://graph.facebook.com/me/photos?access_token=<ACCESS_TOKEN>&url=http://digiback.cc/ej7&name=Trees&method=post

Again, the code looks solid to me, and it works ok on my local machine. Could it have something t do with timeouts? When I try the facebook_post_url in a browser, it returns instantly.

Does anyone have any ideas? I am ata complete loss here.

Many thanks!

like image 435
Brett Avatar asked Oct 24 '12 14:10

Brett


3 Answers

Simple answer: the default deadline for url fetching is set to 5 seconds.

How to fix:

from google.appengine.api import urlfetch

urlfetch.set_default_fetch_deadline(60)
like image 165
Randy Sugianto 'Yuku' Avatar answered Oct 15 '22 18:10

Randy Sugianto 'Yuku'


Try setting the deadline for urlfetch to 30seconds or more(depending on whether you're calling urlfetch from within a task handler or request handler)

More info about urlfetch:Url Fetch Docs

like image 44
Rob Curtis Avatar answered Oct 15 '22 18:10

Rob Curtis


An alternative to setting the deadline globally is to set it on the specific fetch call. In your case:

result = urlfetch.fetch(
    url=your_url,
    deadline=60
)
like image 1
Arjun Mehta Avatar answered Oct 15 '22 16:10

Arjun Mehta