我正在使用谷歌應用引擎的urlfetch功能來遠程登錄到其他網絡服務。一切工作都很好,但是當我轉到生產時,登錄過程失敗。您對如何調試生產URL獲取有任何建議嗎?Google App引擎網址抓取不適用於生產
我在我的URL獲取中使用cookie和其他標題(我手動設置標頭中的cookie)。其中一個cookie是會話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的urlfetch對目標服務器來說太快了。但在通話之間插入延遲後,我仍然遇到問題。
- Google將一些數據附加到User-Agent標題。但是我已經將這個標題添加到了開發中,而我沒有遇到問題。
生產URL獲取和開發URL獲取之間還有什麼其他區別?你有任何想法來調試嗎?
更新2
(首先更新上面合併) 我不知道這是否是我做的事(或許將延遲或禁止上述緩存),但現在的生產環境中工作的大約50%的時間。這絕對看起來像一個競爭條件。不幸的是,我不知道問題出在我的代碼,谷歌代碼還是目標服務器的代碼中。
除了「不工作」之外,您還未提供任何其他詳細信息 - 運行此代碼時會發生什麼情況?您是否嘗試將它指向您控制的站點,以便您可以記錄收到的請求? –
好主意。我試着將它指向一個控制站點,並且我已經區分了兩個請求對象。它們幾乎完全相同。也許谷歌的IP被列入黑名單,我不確定。 – speedplane
您仍然沒有解釋在這種情況下「不起作用」的含義。 –