httpclient调用远程接口的方法


Posted in Java/Android onAugust 14, 2022

本文实例为大家分享了httpclient调用远程接口的具体代码,供大家参考,具体内容如下

依赖jar包 httpclient:4.5.6.jar httpcore:4.4.3

封装HttpClient接口

package com.example.HttpClient;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.client.utils.URIBuilder;
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.ArrayList;
import java.util.List;
import java.util.Map;

//需要引入的jar包
//compile('org.apache.httpcomponents:httpclient:4.5.6')
//compile('org.apache.httpcomponents:httpcore:4.4.3')

/**
 * @program: webservice_demo
 * @description: HttpClient工具类
 * @author: miaoqixin
 * @create: 2018-11-28 16:39
 **/
public class HttpClientUtil {

    private CloseableHttpClient httpClient;

    public HttpClientUtil() {
        // 1 创建HttpClinet,相当于打开浏览器
        httpClient = HttpClients.createDefault();
    }

    /* *
     * get请求
     * @author miaoqixin
     * @date 2018/11/28 16:51
     * @param [url, map]
     * @return HttpResult
     */
    public HttpResult doGet(String url, Map<String, Object> map) throws Exception {

        // 声明URIBuilder
        URIBuilder uriBuilder = new URIBuilder(url);

        // 判断参数map是否为非空
        if (map != null) {
            // 遍历参数
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                // 设置参数
                uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
            }
        }

        // 2 创建httpGet对象,相当于设置url请求地址
        HttpGet httpGet = new HttpGet(uriBuilder.build());

        // 3 使用HttpClient执行httpGet,相当于按回车,发起请求
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpGet);
        } catch (IOException e) {
            HttpResult httpResult = new HttpResult();
            httpResult.setCode(404);
            httpResult.setBody("请求失败");
            return httpResult;
        }

        // 4 解析结果,封装返回对象httpResult,相当于显示相应的结果
        // 状态码
        // response.getStatusLine().getStatusCode();
        // 响应体,字符串,如果response.getEntity()为空,下面这个代码会报错,所以解析之前要做非空的判断
        // EntityUtils.toString(response.getEntity(), "UTF-8");
        HttpResult httpResult = new HttpResult();
        // 解析数据封装HttpResult
        if (response.getEntity() != null) {
            //httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(),"UTF-8"));
            httpResult.setCode(response.getStatusLine().getStatusCode());
            httpResult.setBody(EntityUtils.toString(response.getEntity(),"UTF-8"));

        } else {
            //httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
            httpResult.setCode(response.getStatusLine().getStatusCode());
            //httpResult.setBody("");
        }

        // 返回
        return httpResult;
    }

    /* *
     * post请求
     * @author miaoqixin
     * @date 2018/11/28 18:13
     * @param [url, map]
     * @return com.example.HttpClient.HttpResult
     */
    public HttpResult doPost(String url, Map<String, Object> map) throws Exception {
        // 声明httpPost请求
        HttpPost httpPost = new HttpPost(url);

        // 判断map不为空
        if (map != null) {
            // 声明存放参数的List集合
            List<NameValuePair> params = new ArrayList<NameValuePair>();

            // 遍历map,设置参数到list中
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
            }

            // 创建form表单对象
            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");

            // 把表单对象设置到httpPost中
            httpPost.setEntity(formEntity);
        }

        // 使用HttpClient发起请求,返回response
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpPost);
        } catch (IOException e) {
            HttpResult httpResult = new HttpResult();
            httpResult.setCode(404);
            httpResult.setBody("请求失败");
            return httpResult;
        }

        // 解析response封装返回对象httpResult
        HttpResult httpResult = new HttpResult();
        // 解析数据封装HttpResult
        if (response.getEntity() != null) {
            //httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(),"UTF-8"));
            httpResult.setCode(response.getStatusLine().getStatusCode());
            httpResult.setBody(EntityUtils.toString(response.getEntity(),"UTF-8"));

        } else {
            //httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
            httpResult.setCode(response.getStatusLine().getStatusCode());
            //httpResult.setBody("");
        }

        // 返回结果
        return httpResult;
    }

    /* *
     * Put请求
     * @author miaoqixin
     * @date 2018/11/28 18:14
     * @param [url, map]
     * @return com.example.HttpClient.HttpResult
     */
    public HttpResult doPut(String url, Map<String, Object> map) throws Exception {
        // 声明httpPost请求
        HttpPut httpPut = new HttpPut(url);

        // 判断map不为空
        if (map != null) {
            // 声明存放参数的List集合
            List<NameValuePair> params = new ArrayList<NameValuePair>();

            // 遍历map,设置参数到list中
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                params.add(new BasicNameValuePair(entry.getKey(), entry.getValue().toString()));
            }

            // 创建form表单对象
            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(params, "UTF-8");

            // 把表单对象设置到httpPost中
            httpPut.setEntity(formEntity);
        }

        // 使用HttpClient发起请求,返回response
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpPut);
        } catch (IOException e) {
            HttpResult httpResult = new HttpResult();
            httpResult.setCode(404);
            httpResult.setBody("请求失败");
            return httpResult;
        }

        // 解析response封装返回对象httpResult
        HttpResult httpResult = new HttpResult();
        // 解析数据封装HttpResult
        if (response.getEntity() != null) {
            //httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(),"UTF-8"));
            httpResult.setCode(response.getStatusLine().getStatusCode());
            httpResult.setBody(EntityUtils.toString(response.getEntity(),"UTF-8"));

        } else {
            //httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
            httpResult.setCode(response.getStatusLine().getStatusCode());
            //httpResult.setBody("");
        }

        // 返回结果
        return httpResult;
    }

    /* *
     *  Delete请求
     * @author miaoqixin
     * @date 2018/11/28 18:20
     * @param [url, map]
     * @return com.example.HttpClient.HttpResult
     */
    public HttpResult doDelete(String url, Map<String, Object> map) throws Exception {

        // 声明URIBuilder
        URIBuilder uriBuilder = new URIBuilder(url);

        // 判断参数map是否为非空
        if (map != null) {
            // 遍历参数
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                // 设置参数
                uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
            }
        }

        // 2 创建httpGet对象,相当于设置url请求地址
        HttpDelete httpDelete = new HttpDelete(uriBuilder.build());

        // 3 使用HttpClient执行httpGet,相当于按回车,发起请求
        CloseableHttpResponse response = null;
        try {
            response = httpClient.execute(httpDelete);
        } catch (IOException e) {
            HttpResult httpResult = new HttpResult();
            httpResult.setCode(404);
            httpResult.setBody("请求失败");
            return httpResult;

        }

        // 4 解析结果,封装返回对象httpResult,相当于显示相应的结果
        // 状态码
        // response.getStatusLine().getStatusCode();
        // 响应体,字符串,如果response.getEntity()为空,下面这个代码会报错,所以解析之前要做非空的判断
        // EntityUtils.toString(response.getEntity(), "UTF-8");
        HttpResult httpResult = new HttpResult();
        // 解析数据封装HttpResult
        if (response.getEntity() != null) {
            //httpResult = new HttpResult(response.getStatusLine().getStatusCode(),EntityUtils.toString(response.getEntity(),"UTF-8"));
            httpResult.setCode(response.getStatusLine().getStatusCode());
            httpResult.setBody(EntityUtils.toString(response.getEntity(),"UTF-8"));

        } else {
            //httpResult = new HttpResult(response.getStatusLine().getStatusCode(), "");
            httpResult.setCode(response.getStatusLine().getStatusCode());
            //httpResult.setBody("");
        }
        // 返回
        return httpResult;
    }
}

创建HttpClient调用接口的返回实体

package com.example.HttpClient;
import lombok.Data;
import java.io.Serializable;
/**
 * @program: webservice_demo
 * @description: HttpClient返回对象
 * @author: miaoqixin
 * @create: 2018-11-28 16:54
 **/
@Data
public class HttpResult implements Serializable {

    // 响应的状态码
    private int code;

    // 响应的响应体
    private String body;

}

然后用我们通过junit来测试一下接口

package com.example.HttpClient;

import org.junit.Before;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;

/**
 * @program: webservice_demo
 * @description: 调用测试
 * @author: miaoqixin
 * @create: 2018-11-28 17:21
 **/

public class APIServiceTest {

    private HttpClientUtil apiService;

    @Before
    public void init() {
        this.apiService = new HttpClientUtil();
    }


    // 查询
    @Test
    public void testQueryItemById() throws Exception {
        // http://manager.aaaaaa.com/rest/item/interface/{id}
        String url = "https://www.apiopen.top/weatherApi";
        Map<String, Object> map = new HashMap<>();
        //map.put("id",22222);
        //map.put("name",33333);
        HttpResult httpResult = apiService.doGet(url,map);
        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());
        
    }

    // 新增
    @Test
    public void testSaveItem() throws Exception {
        // http://manager.aaaaaa.com/rest/item/interface/{id}
        String url = "https://www.i12368.com/preservation/auth/checkUsera";
        Map<String, Object> map = new HashMap<String, Object>();
        // title=测试RESTful风格的接口&price=1000&num=1&cid=888&status=1
        map.put("userId", 12343474);
        HttpResult httpResult = apiService.doPost(url, map);
        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());

    }

    // 修改
    @Test
    public void testUpdateItem() throws Exception {
        // http://manager.aaaaaa.com/rest/item/interface/{id}
        String url = "http://manager.aaaaaa.com/rest/item/interface";
        Map<String, Object> map = new HashMap<String, Object>();
        // title=测试RESTful风格的接口&price=1000&num=1&cid=888&status=1
        map.put("title", "测试APIService调用修改接口");
        map.put("id", "44");
        HttpResult httpResult = apiService.doPut(url, map);
        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());
    }


    // 删除
    @Test
    public void testDeleteItemById() throws Exception {
        // http://manager.aaaaaa.com/rest/item/interface/{id}
        String url = "http://manager.aaaaaa.com/rest/item/interface/44";
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("id", "44");
        HttpResult httpResult = apiService.doDelete(url, map);
        System.out.println(httpResult.getCode());
        System.out.println(httpResult.getBody());
    }


}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Java/Android 相关文章推荐
Java实现斗地主之洗牌发牌
Jun 14 Java/Android
SpringBoot项目中控制台日志的保存配置操作
Jun 18 Java/Android
Spring Boot 整合 Apache Dubbo的示例代码
Jul 04 Java/Android
Spring Boot DevTools 全局配置学习指南
Mar 31 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
springboot应用服务启动事件的监听实现
Apr 06 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
springcloud整合seata
May 20 Java/Android
SpringCloud超详细讲解Feign声明式服务调用
Jun 21 Java/Android
java中如何截取字符串最后一位
Jul 07 Java/Android
HttpClient实现文件上传功能
Aug 14 Java/Android
Springboot集成kafka高级应用实战分享
Aug 14 Java/Android
Java Spring读取和存储详细操作
Aug 05 #Java/Android
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
Aug 05 #Java/Android
Java代码规范与质量检测插件SonarLint的使用
Aug 05 #Java/Android
Spring boot admin 服务监控利器详解
Aug 05 #Java/Android
volatile保证可见性及重排序方法
Aug 05 #Java/Android
app场景下uniapp的扫码记录
Jul 23 #Java/Android
IDEA中sout快捷键无效问题的解决方法
Jul 23 #Java/Android
You might like
PHILIPS L4X25T电路分析和打理
2021/03/02 无线电
PHP5/ZendEngine2的改进
2006/10/09 PHP
用PHP制作静态网站的模板框架(一)
2006/10/09 PHP
php入门教程 精简版
2009/12/13 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
PHP循环结构实例讲解
2014/02/10 PHP
浅谈php扩展imagick
2014/06/02 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
PHP实现读取文件夹及批量重命名文件操作示例
2019/04/15 PHP
ExtJS Grid使用SimpleStore、多选框的方法
2009/11/20 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
vue解决使用$http获取数据时报错的问题
2019/10/30 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
Python生成8位随机字符串的方法分析
2017/12/05 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
Django 导出项目依赖库到 requirements.txt过程解析
2019/08/23 Python
Python简单实现区域生长方式
2020/01/16 Python
通过实例解析python and和or使用方法
2020/11/14 Python
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
女大学生自我鉴定
2013/12/09 职场文书
心理健康教育制度
2014/01/27 职场文书
物理专业本科生自荐信
2014/01/30 职场文书
《云房子》教学反思
2014/04/20 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python
新手入门Mysql--sql执行过程
2021/06/20 MySQL
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL