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响应中