18

ローカル マシンで適切に動作する Google AppEngine アプリケーションがあります。アプリは、(URL から) 画像を Facebook ウォールに投稿します。ただし、Google のサーバーにデプロイすると、エラーが発生します。

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

問題のあるコードは次のとおりです。

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 完全なエラー トレースは次のとおりです。

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

繰り返しますが、コードはしっかりしているように見え、ローカル マシンで問題なく動作します。タイムアウトと関係があるのでしょうか? ブラウザで試してみると、facebook_post_urlすぐに戻ります。

誰にもアイデアはありますか?私はここで完全な損失を被っています。

どうもありがとう!

4

5 に答える 5

29

簡単な答え: URL フェッチのデフォルトの期限は 5 秒に設定されています。

直し方:

from google.appengine.api import urlfetch

urlfetch.set_default_fetch_deadline(60)
于 2014-02-28T09:32:54.980 に答える
9

urlfetch の期限を 30 秒以上に設定してみてください (タスク ハンドラーまたは要求ハンドラーのどちらから urlfetch を呼び出すかによって異なります)。

urlfetch の詳細: Url Fetch Docs

于 2012-10-24T16:09:03.003 に答える
0

関連する可能性があります: ローカルの urlfetch コードをテストするときに、同じ期限を過ぎていました。ブラウザ経由で開発サーバー上のリソースを直接 GET することはできますが、たとえば、http://localhost:8080/content/test.jpg同じ方法で同じことを試みると、urlfetch毎回失敗する運命にありました。実行時に 127.0.0.1 に変換される localhost からのフェッチは、.NET ではサポートされていないとしか思えませんurlfetch

あなたの問題は本当にタイムアウトの問題であることがわかりましたが、私の答えは開発で urlfetch を使用しないことです。

于 2013-02-21T01:18:14.483 に答える
0

私はFacebook APIに精通していません。しかし、urlfetch の構成方法は少し奇妙に見えます。通常、メソッド (Post) は urlfetch 引数であり、投稿ペイロードは urlencoded です。これにより、次の結果が得られます。

params = urllib.urlencode([
    ('access_token', facebook_access_token),
    ('url', url),
    ('name', caption),
  ])
 response = urlfetch.fetch(url='https://graph.facebook.com/me/photos', payload=params, method=urlfetch.POST,
                      headers={'Content-Type': 'application/x-www-form-urlencoded'})
于 2012-10-24T16:37:18.073 に答える