Google App Engine の urlfetch 機能を使用して、別の Web サービスにリモートでログインしています。開発ではすべて正常に動作しますが、本番環境に移行するとログイン手順が失敗します。プロダクション URL フェッチをデバッグする方法について何か提案はありますか?
URL フェッチで Cookie やその他のヘッダーを使用しています (ヘッダー内に手動で Cookie を設定しています)。Cookie の 1 つはセッション Cookie です。
エラーや例外はありません。実稼働環境では、URL コマンドにログインを送信するとセッション Cookie が返されますが、セッション Cookie を使用してページを要求すると、それらは無視され、ログイン情報の入力を再度求められます。開発時にセッション Cookie を取得すると、内部ページに問題なくアクセスできます。問題は Cookie の保存に関連していると思いましたが、リクエストがほぼ同じであるため、正しいように見えます。
これは私がそれを呼び出す方法です:
fetchresp = urlfetch.fetch(url=req.get_full_url(),
payload=req.get_data(),
method=method,
headers=all_headers,
allow_truncated=False,
follow_redirects=False,
deadline=10
)
問題に関するいくつかの推測は次のとおりです。
- Google の url fetch 実装の分散型の性質により、問題が発生しています。
- 本番環境では、開発環境とは異なる順序でヘッダーが送信され、サーバーが混乱する可能性があります。
- Google のサーバーの一部は、ターゲット サーバーによってブラックリストに登録されています。
以下は、私が除外したいくつかの仮説です。
- Google キャッシングは積極的すぎます。しかし、ヘッダー Cache-Control: no-store を使用してキャッシュをオフにした後も問題が発生します。
- Google の urlfetch はターゲット サーバーに対して速すぎます。しかし、呼び出しの間に遅延を挿入した後も問題が発生します。
- Google は User-Agent ヘッダーにいくつかのデータを追加します。しかし、そのヘッダーを開発に追加しましたが、問題は発生しません。
本番用 URL フェッチと開発用 URL フェッチには他にどのような違いがありますか? これをデバッグするためのアイデアはありますか?
更新 2
(最初の更新は上記に組み込まれています)それが私が行ったものかどうかはわかりません(おそらく上記の遅延の追加またはキャッシュの無効化)が、現在、本番環境は約50%の時間で動作します. これは間違いなく競合状態のように見えます。残念ながら、問題が自分のコードにあるのか、Google のコードにあるのか、ターゲット サーバーのコードにあるのかはわかりません。