2015年7月

HttpClient下完美Post/Redirect/Post

一些特殊的原因,需要利用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覆盖他的isRedirectedgetRedirect,实现关键的获取重定向后的HttpUriRequest即可,即:

    @Override
    public HttpUriRequest getRedirect(HttpRequest request, HttpResponse response, HttpContext context) throws ProtocolException {

    }

看了HttpRequest 的接口后瞬间就麻木了,

- 阅读剩余部分 -