2014-12-10 3 views
0

로 리디렉션, 나는urlfetch_stub.py : POST에 301을받습니다. 최신 SDK 1.9.17로 업그레이드 한 후 GET

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> 

내 코드는 매우 간단합니다 로컬 dev_appengine.py 내 프로젝트를 실행할 때이 오류가 시작합니다.

 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 문제가 아닌 경우 코드를 수정하려면 어떻게해야합니까?

답변

2

업데이트 된 SDK에서 URLFetch가 리디렉션을 처리하는 방법이 변경되었습니다.

간단히 말해서 기본적으로 모든 리디렉션은 원래 방법이 무엇인지에 관계없이 GET 방법이됩니다. 따라서 POST URLFetch를 수행하면 리디렉션이 GET으로 바뀝니다.

코드를 수정하는 방법은 두 가지가 있습니다 :

1)를 사용하여 리디렉션을 사용하고부터 최종 URL 직접

을 대상으로하지 마십시오

2) 재에 포함 된 모든 URL을 가져올 수에 대한 방법을 GET하여 오류가 있지만 대상 URL이 GET 요청을 수락하지 않는 것 같습니다. 그럴 경우 직접 POST를하십시오.

URL을 가져올 수에 대한 자세한 내용은이 링크를 참조하십시오 - 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

관련 문제