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



从输出中,我了解到网站主页确实会刷新并将请求重定向到其他页面,这在浏览器上是可以的,但在代码上不是。那么我该如何推进重定向呢?

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"); 时,这会引发意外的文件结尾异常

您必须解析输出并查找<META HTTP-EQUIV=REFRESH>标记。它告诉浏览器,内容本身中包含了相应的响应头。在这种情况下,它告诉浏览器在0秒后重定向到/sites/engbm。只是为了明确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请求没有响应主体。

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

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

读取响应代码(HttpURLConnection.getResponseCode()),然后读取标头并获得Location标头的值,并对此URL进行新的请求。

最新更新