1

問題は、開発環境(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)に関係なく問題が発生しているようです。これは、セッション管理の問題だと思います。

4

1 に答える 1

0

もちろん、理論的には、銀行が一部の場所からのリクエストを (IP アドレスによって) 許可しない可能性があります。そして明らかに、何か制限があるかどうか、銀行に尋ねることができます。

RFC 2616が 403 応答について述べていることに注意してください。

リクエスト メソッドが HEAD ではなく、サーバーがリクエストが実行されなかった理由を公開したい場合、拒否の理由をエンティティに記述する必要があります。

そのため、おそらく銀行の対応にさらに詳細が記載されています。

また、独自のサービスを設定して、銀行の URL の代わりに使用し、すべての HTTP ヘッダーをログに記録することもできます。銀行に POST して比較するのと同じように、この URL に POST します。リクエスト アドレスを除いて、ローカル マシンからのリクエストと「Google から」のリクエストに他に違いはありますか。

于 2012-01-07T23:15:17.380 に答える