一些特殊的原因,需要利用HttpClient自动的完成Post方法的301重定向,看了默认HttpClient官方给出的默认实现是org.apache.http.impl.client.DefaultRedirectStrategy
,可以定向的方法就限定死了,
/**
* Redirectable methods.
*/
private static final String[] REDIRECT_METHODS = new String[] {
HttpGet.METHOD_NAME,
HttpHead.METHOD_NAME
};
显然是无法完成Post/Redirect/Post的,所以还得继续找Apache针对接口org.apache.http.client.RedirectStrategy
的实现,还好在IDE的帮助下很快找到了这个Apache关于自动重定向的终极实现org.apache.http.impl.client.LaxRedirectStrategy
,这回支持Post的重定向了,但是发现无法将原Post请求Body中的数据传递下去直接丢失了,这显然是非常不理想的,无法保持原有请求的完整性几乎等于白做一样。苦恼之下只能自行实现RedirectStrategy接口,不过可以继承DefaultRedirectStrategy覆盖他的isRedirected
和getRedirect
,实现关键的获取重定向后的HttpUriRequest即可,即:
@Override
public HttpUriRequest getRedirect(HttpRequest request, HttpResponse response, HttpContext context) throws ProtocolException {
}
看了HttpRequest 的接口后瞬间就麻木了,
- 阅读剩余部分 -