Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打开url连接时如何处理网站主页重定向_Java_Redirect_Timeout_Urlconnection - Fatal编程技术网

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

Java 打开url连接时如何处理网站主页重定向,java,redirect,timeout,urlconnection,Java,Redirect,Timeout,Urlconnection,从输出中,我了解到网站主页确实会刷新,并将请求重定向到浏览器上正常的其他页面,但在代码上不会。那么,我如何沿着重定向前进呢 try { URL url = StringUtils.stringToURL(link); URLConnection dbGatewayURL = url.openConnection(); dbGatewayURL.setConnectTimeout(timeout); B

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

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.setRequestMethodHEAD时,会引发意外的文件结尾异常

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

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

读取响应代码HttpURLConnection.getResponseCode,然后读取头并获取位置头的值,然后对此URL发出新请求。

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

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

读取响应代码HttpURLConnection.getResponseCode,然后读取标题并获取位置标题的值,然后对此URL发出新请求。

您必须解析输出并查找标记。它告诉浏览器内容本身中包含了响应标题等同物。在本例中,它告诉浏览器在0秒后重定向到/sites/engbm。只是想弄清楚META HTTP-EQUIV的用途:

http equiv属性为内容属性的信息/值提供http头

http equiv属性可用于模拟http响应头

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

至于:

当我尝试使用httpUrlConn.setRequestMethodHEAD时,会引发意外的文件结尾异常


这是因为。

您必须解析输出并查找标记。它告诉浏览器内容本身中包含了响应标题等同物。在本例中,它告诉浏览器在0秒后重定向到/sites/engbm。只是想弄清楚META HTTP-EQUIV的用途:

http equiv属性为内容属性的信息/值提供http头

http equiv属性可用于模拟http响应头

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

至于:

当我尝试使用httpUrlConn.setRequestMethodHEAD时,会引发意外的文件结尾异常


这是因为。

所有3xx类型的HTTP响应代码通常都与重定向需求相关。例如,这包括找到的302个。301并不意味着所有重定向。@Santosh我得到的响应代码为200,标题与我之前发布的标题相同,不包含Location属性,请详细说明您的回答的最后部分OP的问题是重定向是在返回的内容中发出的,而不是作为HTTP响应。@JonLin如果从HttpURLConnection返回的内容指示重定向代码,那不是必须由HTTP响应触发吗?@E_net4我的理解是,返回的是200,但在浏览器上,页面被重定向到其他地方,但使用URLConnection则不是,请求页面的内容包含一个通知客户端重定向的命令。这是在内容中,而不是在HTTP响应中。3xx类型的HTTP响应代码通常与重定向需求相关。例如,这包括找到的302个。301并不意味着所有重定向。@Santosh我得到的响应代码为200,标题与我之前发布的标题相同,不包含Location属性,请详细说明您的回答的最后部分OP的问题是重定向是在返回的内容中发出的,而不是作为HTTP响应。@JonLin如果从HttpURLConnection返回的内容指示重定向代码,那不是必须由HTTP响应触发吗?@E_net4我的理解是,返回的是200,但在浏览器上,页面被重定向到其他地方,但使用URLConnection则不是,请求页面的内容包含一个通知客户端重定向的命令。这是在内容中,而不是在HTTP响应中