打开url连接时如何处理网站主页重定向

时间:2012-08-05 17:46:07

标签: java redirect timeout urlconnection

从输出我理解网站主页确实刷新并将请求重定向到在浏览器上发生的其他页面,但它不在代码上。那么如何与重定向一起前进呢?

try {
            URL url = StringUtils.stringToURL(link);
            URLConnection dbGatewayURL = url.openConnection();
            dbGatewayURL.setConnectTimeout(timeout);
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    dbGatewayURL.getInputStream()));
            StringBuffer responseData = new StringBuffer();
            String line = "";
            while ((line = in.readLine()) != null) {
                responseData.append(line + "\n");
            }

Out out是:

<HEAD>
<META HTTP-EQUIV=REFRESH CONTENT="0;URL=/sites/engbm">
</HEAD>

当我尝试httpUrlConn.setRequestMethod("HEAD");

时,会引发意外的文件异常结束

2 个答案:

答案 0 :(得分:2)

您需要仔细查看http标头。重定向的响应代码是302.每个重定向响应都带有一个位置标头。典型的重定向响应如下

HTTP/1.1 301 Moved Permanently
Location: http://www.example.org/
Content-Type: text/html
Content-Length: 174

阅读回复代码(HttpURLConnection.getResponseCode()),然后阅读标题并获取Location标题的值,并向此网址发出新请求。

答案 1 :(得分:2)

您必须解析输出并查找<META HTTP-EQUIV=REFRESH>标记。它告诉浏览器内容本身包含响应头等价物。在这种情况下,它告诉浏览器在/sites/engbm秒后重定向到0。只是为了清除META HTTP-EQUIV的用途:http://www.w3schools.com/tags/att_meta_http_equiv.asp

  

http-equiv属性为内容属性的信息/值提供HTTP标头。

     

http-equiv属性可用于模拟HTTP响应头。​​

     

如果设置了name属性,则不应设置http-equiv属性。

至于:

  

当我尝试httpUrlConn.setRequestMethod("HEAD");

时,会引发意外的文件异常结束

这是因为HEAD requests have no response body