httpclient post请求返回301解决方案

 public static String post(String url, Map<String,Object> paramMap,Map<String,String> headerMap) {
        CloseableHttpClient httpClient = HttpClients.createDefault();

        try {
            HttpPost post = new HttpPost(url);


            //请求头
            if(headerMap != null){
                for (Map.Entry<String, String> entry : headerMap.entrySet()) {
                    post.addHeader(entry.getKey(),entry.getValue());
                }
            }

            //创建参数列表
            List nameValuePairs = Lists.newArrayList();
            for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
                if(entry.getValue() instanceof String) {
                    nameValuePairs.add(new BasicNameValuePair(entry.getKey(), (String) entry.getValue()));
                }else if(entry.getValue() instanceof String[]){
                    String[] arr = (String[]) entry.getValue();
                    for(String val : arr){
                        nameValuePairs.add(new BasicNameValuePair(entry.getKey(), val));
                    }
                }
            }
            //url格式编码
            UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(nameValuePairs,"UTF-8");
            post.setEntity(uefEntity);
            //执行请求
            CloseableHttpResponse httpResponse = httpClient.execute(post);
            if(httpResponse.getStatusLine() == null || httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK){
                return "";
            }
            try{
                HttpEntity entity = httpResponse.getEntity();
                if (null != entity){
                    return EntityUtils.toString(entity);

                }
            } finally{
                httpResponse.close();
            }

        } catch( UnsupportedEncodingException e){
            LOGGER.error("连接异常",e);
            return "";
        } catch (IOException e) {
            LOGGER.error("连接异常",e);
            return "";
        }
        finally{
            if (httpClient != null){
                try {
                    httpClient.close();
                } catch (IOException e) {
                    LOGGER.error("连接异常",e);
                }
            }
        }

        return "";
    }

如上代码,状态码返回301,httpclient版本为4.0以上版本,查了很久,答案都略坑,最后找到解决办法是将httpclient的创建方式改为如下代码:

        CloseableHttpClient httpClient = HttpClientBuilder.create().setRedirectStrategy(new LaxRedirectStrategy()).build();

附解决方案地址:http://www.baeldung.com/httpclient-redirect-on-http-post

你可能感兴趣的:(httpclient)