2

从输出中,我了解到网站主页确实刷新并将请求重定向到在浏览器上正常但在代码上没有的其他页面。那么我该如何与重定向一起前进呢?

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");
            }

输出是:

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

当我尝试时,这会引发意外的文件结束异常httpUrlConn.setRequestMethod("HEAD");

4

2 回答 2

2

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

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

读取响应代码 ( HttpURLConnection.getResponseCode()),然后读取标头并获取标头的值Location并向该 URL 发出新请求。

于 2012-08-05T17:53:45.950 回答
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请求没有响应正文

于 2012-08-05T18:02:30.270 回答