如何关注“页面自动重定向”以获取响应代码?
问题描述:
我用下面的代码获取一个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;
}
}
答
您需要在遵循基于响应代码的HTTP重定向的循环内对您的HttpConnection进行编码。
响应中的HTTP头“位置”应该给你一个新的主机(也许它可以用来替换整个URL)。
HttpConnection.HTTP_MOVED_TEMP
和HttpConnection.HTTP_MOVED_PERM
是指示重定向的两个响应代码。
+0
感谢的人, 我见过张贴我的解决方案后,您的答案。 顺便说一句,存在另一个响应代码是HttpConnection.HTTP_TEMP_REDIRECT。 再次感谢您的回复。 我会将其标记为答案。 – 2010-01-12 11:44:25
您可能希望用for循环替换while(true)语句(最多5-10次尝试)以防止进入无限重定向循环,有时可能会发生配置错误的Web服务器或代理服务器。 – 2010-01-12 18:12:12
感谢Marc发表评论。我认为还有另一种解决方案,例如通过将每个新位置(链接)添加到向量中来跟踪重定向链接,并且每当找到新的重定向链接时,代码应该首先检查它是否存在于向量中,因为如果它存在,它会导致循环无限重定向。感谢这封信。 – 2010-01-13 09:42:30