問題は、開発環境(Google App Engineのローカルサーバー)でurlfetch.fetch(...)を使用してPOSTリクエストを実行すると、期待どおりにHTTP 302ステータスを取得することです(リダイレクトを実行できます)。しかし、アプリをアップロードして.appspot.comから実行しようとすると、403で応答をフェッチします。これは「禁止」です。
詳細:
- URLはhttps(私の銀行サイト)です
- リクエストヘッダーにCookieがあります
- .. ほかに何か ?
リモートサイト(銀行)は、2つのリクエストを異なる方法で認識しているようです。ローカルはOK、「fromgoole」はOKではありません。
私のPythonコード:
url1 = "https://www.ebgz.pl/detal-web/jbank/unlogged/choose/method.do?rid="+str(random.random())+"&srvc="
response = urlfetch.fetch(url1)
lparser = Link_HTMLParser()
lparser.feed(response.content)
url2 = "https://www.ebgz.pl" + lparser.frameSrc
hdrs = {}
hdrs['Referer'] = url1
cookie = response.headers.get('Set-Cookie')
if cookie:
hdrs['Cookie'] = cookie
response = urlfetch.fetch(url2, headers = hdrs)
Link_HTMLParserは、フレームのソースリンクを取得するための単純なパーサーです(url1の最初の応答コンテンツを見ると、明らかになります)。
class Link_HTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
if tag == "iframe":
for n,v in attrs:
if n == 'src':
self.frameSrc = v
問題は2番目の応答にあります:グーグルからの403、そして地元のゲーサーバーからの200。質問の冒頭でPOSTについて説明しましたが、方法(GETまたはPOST)に関係なく問題が発生しているようです。これは、セッション管理の問題だと思います。