HttpClient - 基本使用示例

一、HttpClient的主要功能

  • 实现了所有 HTTP 的方法(GET、POST、PUT、HEAD、DELETE、HEAD、OPTIONS 等)
  • 支持 HTTPS 协议
  • 支持代理服务器(Nginx等)等
  • 支持自动(跳转)转向
  • ……

二、环境准备

1、JDK版本:JDK17

2、导入HttpClient包,版本:httpcomponents-client-4.5.13-bin,下载地址:http://hc.apache.org/downloads.cgi

3、导入fastjson包,版本:fastjson-1.2.78,下载地址:https://mvnrepository.com/

注:本人引入此依赖的目的是,在后续示例中,会用到“将对象转化为json字符串的功能”,也可以引其他有此功能的依赖。 

三、使用方法

使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。

1. 创建HttpClient对象。

2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。

3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HttpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。

4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。

5. 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。

6. 释放连接。无论执行方法是否成功,都必须释放连接

四、详细示例

1、带参数的put请求

@Test(description = "新建订单")
    public void putTask() throws IOException {
        String url = "https://xxx-api.xxx.cn/order/web/v1/create";
        String params ="{"Id":"6816301312","OrderName":"短袖"}";

        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPut httpPut = new HttpPut(url);
        httpPut.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36");
        httpPut.setHeader("Token",token);
        httpPut.addHeader("Content-Type","application/json;charset=utf-8");

        StringEntity entity = new StringEntity(params,"UTF-8");
        httpPut.setEntity(entity);

        CloseableHttpResponse response = httpClient.execute(httpPut);
        String body = EntityUtils.toString(response.getEntity());
        System.out.println("新建订单,响应内容为:"+ body);
    }

2、带参数的post请求(发送json格式)

@Test(description = "新建订单")
    public void putTask() throws IOException {
        String url = "https://xxx-api.xxx.cn/order/web/v1/create";
        String params ="{"Id":"6816301312","OrderName":"短袖"}";

        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        httpPost.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36");
        httpPost.setHeader("Token",token);
        httpPost.addHeader("Content-Type","application/json;charset=utf-8");

        StringEntity entity = new StringEntity(params,"UTF-8");
        httpPost.setEntity(entity);

        CloseableHttpResponse response = httpClient.execute(httpPost);
        String body = EntityUtils.toString(response.getEntity());
        System.out.println("新建订单,响应内容为:"+ body);
    }

3、带参数的post请求(发送key-value格式)

@Test(description ="登录接口")
    public void Login() throws IOException {
        String url = "https://xxx.cn/saas/auth/login";
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        httpPost.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36");
        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");

        List<BasicNameValuePair> param = new ArrayList<>(4);
        param.add(new BasicNameValuePair("loginFromServer", "http://xxx.cn"));
        param.add(new BasicNameValuePair("username", "李白"));
        param.add(new BasicNameValuePair("password", "123456"));

        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(param, StandardCharsets.UTF_8);
        httpPost.setEntity(formEntity);
        CloseableHttpResponse response = httpClient.execute(httpPost);//执行请求
        //System.out.println("响应状态为:" + response.getStatusLine());
        String body = EntityUtils.toString(response.getEntity());//获取响应内容
        System.out.println("Login的响应内容为:" + body);

        JSONObject jsonObject = JSON.parseObject(body);//转换成json格式
        String data = jsonObject.getString("data");//获取到data值       //拼接双引号: "\""+    +"\""

        Pattern pattern = Pattern.compile("code=(.*)");//正则表达式提取code
        Matcher matcher = pattern.matcher(data);

        if(matcher.find()) {
            code = matcher.group(1);
            System.out.println("提取的code为:" + code);
        }
        //return url;
    }

4、带参数的get请求(json格式)

@Test(description = "获取订单")
    public void getDetail() throws IOException {
        String url = "https://xxx-api.xxx.cn/order/web/v1/detail?id=123&username=李白";

        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        httpGet.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36");
        httpGet.setHeader("Token",token);
        httpGet.addHeader("Content-Type","application/json;charset=utf-8");

       HttpResponse response = httpClient.execute(httpGet);

        String body = EntityUtils.toString(response.getEntity());
        System.out.println("获取订单,响应内容为:"+ body);
    }    

五、其他

  来自:https://www.cnblogs.com/fatCat1/p/11904954.html

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章