HttpClient Redirects Handling
简介
这份文档简单介绍下HttpClient手动处理重定向功能。
因为某些原因,比如需要人工的支持或者HttpClient不支持又或者网络的限制(如需要特殊的权限才可以访问的资源),有些类型的重定向是HttpClient不能自动处理的。当前版本的HttpClient不能够自动处理POST和PUT方法的重定向。
手动处理重定向
介于300和399之间的状态码,都代表重定向。最常见的重定向状态码如下:
· 301 HttpStatus.SC_MOVED_PERMANENTLY,永久移除。
· 302 HtpStatus.SC_MOVED_TEMPORARILY,暂时移除。
· 303 HttpStatus.SC_SEE_OTHER,重定向到其他资源。
· 307 HttpStatus.SC_TEMPORARY_REDIRECT,临时重定向。
注意:有些3XX的状态码并不只是简单给发送请求标识一个不同的URL。这些状态码需要应用自行处理。
当应用程序收个一个简单的重定向Responses时,必须用新的URL去执行HttpMethod的executeMethod方法,重新下载新URL对应的资源。通常,我们采用递归的方式去处理重定向,以防有多个重定向,不过要加标识数去结束你的递归。
String redirectLocation;
Header locationHeader = method.getResponseHeader("location");
if (locationHeader != null) {
redirectLocation = locationHeader.getValue();
} else {
// The response is invalid and did not provide the new location for
// the resource. Report an error or possibly handle the response
// like a 404 Not Found error.
}
String redirectLocation;
Header locationHeader = method.getResponseHeader("location");
if (locationHeader != null) {
redirectLocation = locationHeader.getValue();
} else {
// The response is invalid and did not provide the new location for
// the resource. Report an error or possibly handle the response
// like a 404 Not Found error.
}
当得到新的Location以后,你可以对待一个新的URL一样,使用HttpClient去请求对应的资源。