HttpClient4.3.3 禁止自动重定向

HttpClient4.3中默认允许自动重定向,导致程序中不能跟踪跳转情况,其实只需要在RequestConfig中setRedirectsEnabled(false)即可(默认是true):

设置RequestConfig

private RequestConfig createConfig(int timeout, boolean redirectsEnabled){
    retun RequestConfig.custom()
        .setSocketTimeout(timeout)
        .setConnectTimeout(timeout)
        .setConnectionRequestTimeout(timeout)
        .setRedirectsEnabled(redirectsEnabled)
        .build();
}
public void test(String url){
  CloseableHttpClient client = HttpClients.createDefault();
    try {
        HttpGet httpGet = new HttpGet(url);
        httpGet.setConfig(createConfig(5000, false));
        CloseableHttpResponse response = client.execute(httpGet);
        try {  
            Header h = response.getFirstHeader("Location");  
            if(h!=null) { 
                System.out.println("重定向地址:"+h.getValue());  
            }
        }
        finally {  
            response.close();
        }  
    }  
    finally { 
       client.close();  
    }
}

另外如发生重定向,response的状态码为302,不是200。

完整工具类

package com.chengxumiao.utils;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.LaxRedirectStrategy;
import org.apache.http.util.EntityUtils;
import org.springframework.http.HttpMethod;

import java.io.IOException;

public class HttpProxy {

    /**
     * 请求配置
     *
     * @param timeout          超时时间设置
     * @param redirectsEnabled HttpClient4.3中默认允许自动重定向
     * @return
     */
    private static RequestConfig createConfig(int timeout, boolean redirectsEnabled) {
        return RequestConfig.custom()
                .setSocketTimeout(timeout)
                .setConnectTimeout(timeout)
                .setConnectionRequestTimeout(timeout)
                .setRedirectsEnabled(redirectsEnabled)
                .build();
    }

    /**
     * Http 请求(Json格式参数)
     *
     * @param requestUrl
     * @param requestJson
     * @param httpMethod
     * @return
     * @throws Exception
     */
    public static String httpRequest(String requestUrl, String requestJson, HttpMethod httpMethod) {
        CloseableHttpClient httpClient = null;
        try {
            httpClient = HttpClients.createDefault();
            HttpResponse response;

            if (null == httpMethod) {
                throw new RuntimeException("Http Method should be Get, Post, Put");
            }

            if (HttpMethod.GET == httpMethod) {
                HttpGet httpGet = new HttpGet(requestUrl);
                httpGet.setConfig(createConfig(5000, false));
                response = httpClient.execute(httpGet);
            } else {
                HttpEntityEnclosingRequestBase requestBase = null;

                switc