如何关注“页面自动重定向”以获取响应代码?

问题描述:

我用下面的代码获取一个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”? 如何获得从第二个链接(第一个链接重定向到的链接)返回的响应代码? 有没有像“跟随重定向”来获得自动重定向到的页面的新响应?

在此先感谢。

我找到了解决办法, 这对于那些有兴趣谁:

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

您需要在遵循基于响应代码的HTTP重定向的循环内对您的HttpConnection进行编码。

响应中的HTTP头“位置”应该给你一个新的主机(也许它可以用来替换整个URL)。

HttpConnection.HTTP_MOVED_TEMPHttpConnection.HTTP_MOVED_PERM是指示重定向的两个响应代码。

+0

感谢的人, 我见过张贴我的解决方案后,您的答案。 顺便说一句,存在另一个响应代码是HttpConnection.HTTP_TEMP_REDIRECT。 再次感谢您的回复。 我会将其标记为答案。 – 2010-01-12 11:44:25