2010-03-01 31 views
3

我寫客戶端的Python單元測試,以驗證HTTP 302是否在我的谷歌應用程序引擎的網站重新導向都指向正確的網頁。到目前爲止,我一直在呼籲urllib2.urlopen(my_url).geturl()。然而,我所遇到的2個問題:如何獲取HTTP重定向目標的URL?

  1. 通過使用getURL()似乎並不包括像?k1=v1&k2=v2 URL查詢字符串返回的URL;我怎麼能看到這些? (我需要檢查自己是否沿着正確的訪問者的原始URL查詢字符串來重定向頁面通過。)
  2. geturl()顯示後的任何附加的重定向最終URL。我只關心第一次重定向(來自我的網站);我對此後的任何事情都不知情。例如,我們假設我的網站是example.com。如果用戶請求http://www.example.com/somepath/?q=foo,我可能想將它們重定向到http://www.anothersite.com?q=foo。該另一個網站可能會做另一個重定向到http://subdomain.anothersite.com?q=foo,這是我無法控制或預測的。我怎樣才能確保我的重定向是正確的?

回答

4

供應follow_redirects=Falsefetch function,然後檢索第一重定向從「位置」報頭中的位置中的反應,如下所示:

response = urlfetch.fetch(your_url, follow_redirects=False) 
location = response.headers['Location'] 
+0

由於尼克。雖然Alex的反應非常好,這正是我一直在尋找。 – RexE 2010-03-02 08:01:37

5

使用httplib(並查看響應的返回狀態和位置標題)以避免阻礙您測試的「自動跟隨重定向」。有一個很好的例子here