開発環境(Googleアプリケーションエンジンのローカルサーバー)でurlfetch.fetch(...)を使用してPOSTリクエストを行うと、期待どおりにHTTP 302のステータスが取得される私はリダイレクトを行うことができます)。しかし、アプリケーションをアップロードして.appspot.comから実行しようとすると、403で応答を取得します。これは「禁止されています」です。gae urlfetch local対アップロード済み
詳細:
- URLがhttpsは(私の銀行のサイト)
- は、リクエストヘッダでクッキーがあるある
- ...他に何?
リモートサイト(銀行)は、2つのリクエストが異なっているように見えます。ローカルはOK、「gooleから」はOKではありません。
私のpythonコード:class Link_HTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
if tag == "iframe":
for n,v in attrs:
if n == 'src':
self.frameSrc = v
問題:Link_HTMLParserは(あなたがURL1の最初の応答内容を見れば、それは明らかになって)フレームのソースリンクを取得するためのシンプルなパーサーです
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)
2番目の回答:googleからの403、ローカルgae serwerからの200です。 質問の冒頭でPOSTについて述べましたが、問題(GETまたはPOST)に関係なく発生しているようです。
ありがとうございます。私はクッキーなどを送っていないように、403のexplenationは "セッションが閉じられました"。別のサービスに対するあなたの提案はすばらしく、私はキラーテストであると思っていました。しかし、結果は私に解決策を教えてくれませんでした:1. Googleから1つのgae-specialヘッダーがあります(私はそれが重要であるとは思わない)。 2. GoogleのリクエストIPがインターレスリングしています:0.1.0.40。残りの部分はすべて同じです(セッションクッキーは性質上異なります)。私はここにコードの短い部分を投稿しようとするので、あなたまたは誰かがそれをチェックすることができます。 – sanchesor
それは変です。 IPアドレスが本当に0.1.0.40であることは確かですか?無効です。さらに、私は 'URLFetchService.fetch()'を使って単純なテストを行い、209.85.224.95からの着信接続を得ました。これは、範囲の1つで、http://stackoverflow.com/questions/5591384/ipで与えられています。 -address-block-of-appengine-servers –
それは私にも奇妙です。私はhttp://2live-html.appspot.com/reqで確認します。リクエストの詳細を表示します。 – sanchesor