java httpclient工具类

Posted baobaoxiaokeai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java httpclient工具类相关的知识,希望对你有一定的参考价值。

meven 

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

-- 代码

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.*;

/**
 * HttpClient4.3工具类
 */
@Slf4j
public class HttpClientUtils 

    private static RequestConfig requestConfig = null;
    private static String charset = "utf-8";

    public static void main(String[] args) 
        JSONObject tt = new JSONObject();
        tt.put("aaa", "4444");

        Map mm = new HashMap();
        mm.put("aaa", "555");

        //System.out.println("result:" + httpPost("http://127.0.0.1:8761/hi1", tt));
        // System.out.println("result:" + httpPost("http://127.0.0.1:8761/hi1", mm));
        //System.out.println("result:" + httpPost("http://127.0.0.1:8761/hi1", JSON.toJSONString(mm)));

        System.out.println("result:" + httpPostForm("http://127.0.0.1:8761/hi2", mm));
    


    static 
        // 设置请求和传输超时时间
        requestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(5000).build();
    


    /**
     * @param url
     * @param obj 1. json字符串   2. map  3.JSONObject
     * @return JSONObject
     */
    public static JSONObject httpPost(String url, Object obj) 
        // post请求返回结果
        CloseableHttpClient httpClient = HttpClients.createDefault();
        JSONObject jsonResult = null;
        HttpPost httpPost = new HttpPost(url);
        // 设置请求和传输超时时间
        httpPost.setConfig(requestConfig);
        try 
            if (null != obj) 
                StringEntity entity = null;
                if (obj instanceof String) 
                    entity = new StringEntity(obj.toString(), charset);
                 else 
                    entity = new StringEntity(JSON.toJSONString(obj), charset);
                
                entity.setContentEncoding(charset);
                entity.setContentType("application/json");
                httpPost.setEntity(entity);
            
            log.debug("  -  ", url, obj);
            CloseableHttpResponse response = httpClient.execute(httpPost);

            return convertResponse(response);
         catch (Exception e) 
            log.error("error HttpClientUtils  -  - " + url, obj, e);
         finally 
            httpPost.releaseConnection();
        
        return jsonResult;
    


    /**
     * post请求传输String参数 例如:name=Jack&sex=1&type=2
     * Content-type:application/x-www-form-urlencoded
     *
     * @param url url地址
     * @param
     * @return
     */
    public static JSONObject httpPostForm(String url, Map<String, String> params) 
        // post请求返回结果
        CloseableHttpClient httpClient = HttpClients.createDefault();
        JSONObject jsonResult = null;
        HttpPost httpPost = new HttpPost(url);
        httpPost.setConfig(requestConfig);
        try 
            if (null != params) 
                //组织请求参数
                List<NameValuePair> paramList = new ArrayList<NameValuePair>();
                if (params != null && params.size() > 0) 
                    Set<String> keySet = params.keySet();
                    for (String key : keySet) 
                        paramList.add(new BasicNameValuePair(key, params.get(key)));
                    
                

                httpPost.setEntity(new UrlEncodedFormEntity(paramList, charset));
            
            CloseableHttpResponse response = httpClient.execute(httpPost);
            return convertResponse(response);
         catch (IOException e) 
            log.error("post请求提交失败:" + url, e);
         finally 
            httpPost.releaseConnection();
        
        return jsonResult;
    

    /**
     * 发送get请求
     *
     * @param url 路径
     * @return
     */
    public static JSONObject httpGet(String url) 
        // get请求返回结果
        JSONObject jsonResult = null;
        CloseableHttpClient client = HttpClients.createDefault();
        // 发送get请求
        HttpGet request = new HttpGet(url);
        request.setConfig(requestConfig);
        try 
            CloseableHttpResponse response = client.execute(request);

            convertResponse(response);
         catch (Exception e) 
            log.error("get请求提交失败:" + url, e);
         finally 
            request.releaseConnection();
        
        return jsonResult;
    

    private static JSONObject convertResponse(CloseableHttpResponse response) throws IOException, ParseException 
        // 请求发送成功,并得到响应
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) 
            // 读取服务器返回过来的json字符串数据
            HttpEntity entity = response.getEntity();
            String strResult = EntityUtils.toString(entity, "utf-8");
            // 把json字符串转换成json对象
            return JSONObject.parseObject(strResult);
         else 
            log.error("  ", response);
        

        return null;
    


 

以上是关于java httpclient工具类的主要内容,如果未能解决你的问题,请参考以下文章

关于java httpclient编程的问题

JAVA发送HttpClient

Fiddler 抓取 Java HttpClient发送的请求

接口自动化HttpClient-基础篇1

java: apache HttpClient > 如何禁用重试

java HttpClient的工具类