• 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

     

  • 相关阅读:
    hdu 1425 sort 解题报告
    codeforces B. Jeff and Periods 解题报告
    codeforces A. Jeff and Digits 解题报告
    codeforces B. Xenia and Spies 解题报告
    Python 条件判断的使用
    Python Apache日志处理脚本(初稿)
    Python函数定义
    Python多条件配合使用
    Python循环的使用(2)
    NavigationController导航栏中添加多个UIBarButtonItem
  • 原文地址:https://www.cnblogs.com/Chilam007/p/15614094.html
Copyright © 2020-2023  润新知