1

最新の SDK 1.9.17 にアップグレードした後、プロジェクトをdev_appengine.pyローカルで実行すると、このエラーが発生し始めます。

INFO     2014-12-10 09:48:33,364 myapp.py:796] Url: http://saas.examples.com/documents, payload: {'filename': u'testlink.doc', 'key': u'p1UuXhzhS4qjj2KXmFre'}
WARNING  2014-12-10 09:48:34,089 urlfetch_stub.py:451] Received a 301 to a POST. Redirecting with a GET
WARNING  2014-12-10 09:48:34,791 myapp.py:809] failed. Code: 405, error: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>

私のコードはとてもシンプルです。

        result = urlfetch.fetch(
            url=url,
            payload=json.dumps(payload),
            method=urlfetch.POST,
            headers={'Content-Type': 'application/json'})
        if result.status_code == utils.OK:
            json_result = json.loads(result.content)
        else:
            logging.warn(
                'failed. Code: %s, error: %s',
                result.status_code, result.content)

SDK の以前のバージョン (1.9.15) に戻すと、例外が再び表示されなくなります。

私の質問:

1) それは GAE のバグですか? その場合、GAE チームに報告する適切な方法は何ですか?

2) GAE SDK の問題でない場合、どうすればコードを修正できますか?

4

1 に答える 1

2

更新された SDK で URLFetch がリダイレクトを処理する方法が変更されました。

簡単に言えば、基本的に、元のメソッドが何であったかに関係なく、すべてのリダイレクトが GET メソッドになります。したがって、POST URLFetch を実行すると、リダイレクトによって GET に変換されます。

コードを修正するには、次の 2 つの方法があります。

1) リダイレクトを含むすべての URLFetch に GET メソッドを使用する

2) リダイレクトを使用せず、最終 URL を直接ターゲットにする

あなたのエラーから、ターゲット URL が GET 要求を受け入れていないように見えますか? その場合は、直接 POST を実行してください。

URLFetch の詳細については、このリンクを参照してください - https://cloud.google.com/appengine/docs/python/urlfetch/#Python_Fetching_URLs_in_Python

SDK リリースの詳細については、このリンクを参照してください - https://code.google.com/p/googleappengine/wiki/SdkReleaseNotes#Version_1.9.14_-_October_21,_2014

于 2014-12-10T19:50:36.030 に答える