4

我用下面的代碼獲取一個aspx頁面如何關注「頁面自動重定向」以獲取響應代碼?

HttpConnection connection 
    = (HttpConnection) Connector.open("http://company.com/temp1.aspx" 
             + ";deviceside=true"); 
connection.setRequestMethod(HttpConnection.GET); 
connection.setRequestProperty(HttpHeaders.HEADER_CONNECTION, "close"); 
connection.setRequestProperty(HttpHeaders.HEADER_CONTENT_LENGTH, "0"); 
int resCode = connection.getResponseCode(); 

它工作正常,返回的響應代碼。 但是如果鏈接「http://company.com/temp1.aspx」自動重定向到另一頁面會怎麼樣;假設「http://noncompany.com/temp2.aspx」? 如何獲得從第二個鏈接(第一個鏈接重定向到的鏈接)返回的響應代碼? 有沒有像「跟隨重定向」來獲得自動重定向到的頁面的新響應?

在此先感謝。

回答

8

我找到了解決辦法, 這對於那些有興趣誰:

int resCode; 
String location = "http://company.com/temp1.aspx"; 
while (true) { 
    HttpConnection connection = (HttpConnection) Connector.open(location + ";deviceside=true"); 
    connection.setRequestMethod(HttpConnection.GET); 
    connection.setRequestProperty(HttpHeaders.HEADER_CONNECTION, "close"); 
    connection.setRequestProperty(HttpHeaders.HEADER_CONTENT_LENGTH, "0"); 
    resCode = connection.getResponseCode(); 
    if(resCode == HttpConnection.HTTP_TEMP_REDIRECT 
      || resCode == HttpConnection.HTTP_MOVED_TEMP 
      || resCode == HttpConnection.HTTP_MOVED_PERM) { 
      location = connection.getHeaderField("location").trim(); 
    } else { 
      resCode = connection.getResponseCode(); 
      break; 
    } 
} 
+1

您可能希望用for循環替換while(true)語句(最多5-10次嘗試)以防止進入無限重定向循環,有時可能會發生配置錯誤的Web服務器或代理服務器。 – 2010-01-12 18:12:12

+0

感謝Marc發表評論。我認爲還有另一種解決方案,例如通過將每個新位置(鏈接)添加到向量中來跟蹤重定向鏈接,並且每當找到新的重定向鏈接時,代碼應該首先檢查它是否存在於向量中,因爲如果它存在,它會導致循環無限重定向。感謝這封信。 – 2010-01-13 09:42:30

3

您需要在遵循基於響應代碼的HTTP重定向的循環內對您的HttpConnection進行編碼。

響應中的HTTP頭「位置」應該給你一個新的主機(也許它可以用來替換整個URL)。

HttpConnection.HTTP_MOVED_TEMPHttpConnection.HTTP_MOVED_PERM是指示重定向的兩個響應代碼。

+0

感謝的人, 我見過張貼我的解決方案後,您的答案。 順便說一句,存在另一個響應代碼是HttpConnection.HTTP_TEMP_REDIRECT。 再次感謝您的回覆。 我會將其標記爲答案。 – 2010-01-12 11:44:25