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 Shutdown Hook场景使用及源码分析
Jun 15 Java/Android
spring boot项目application.properties文件存放及使用介绍
Jun 30 Java/Android
Java 泛型详解(超详细的java泛型方法解析)
Jul 02 Java/Android
关于maven依赖 ${xxx.version}报错问题
Jan 18 Java/Android
java executor包参数处理功能 
Feb 15 Java/Android
剑指Offer之Java算法习题精讲二叉树的构造和遍历
Mar 21 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
Android在Sqlite3中的应用及多线程使用数据库的建议
Apr 24 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 Java/Android
Java 写一个简单的图书管理系统
Apr 26 Java/Android
多线程Spring通过@Scheduled实现定时任务
May 25 Java/Android
Java完整实现记事本代码
Jun 16 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
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
利用 window_onload 实现select默认选择
2006/10/09 PHP
php时间不正确的解决方法
2008/04/09 PHP
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
js实现图片拖动改变顺序附图
2014/05/13 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
javascript解析json实例详解
2014/11/05 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
angular4 JavaScript内存溢出问题
2018/03/06 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
jQuery实现容器间的元素拖拽功能
2020/12/01 jQuery
代码块高亮可复制显示js插件highlight.js+clipboard.js整合
2021/02/15 Javascript
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
python脚本内运行linux命令的方法
2015/07/02 Python
Python Gluon参数和模块命名操作教程
2019/12/18 Python
python解析多层json操作示例
2019/12/30 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
香港永安旅游网:Wing On Travel
2017/04/10 全球购物
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
网络管理专业求职信
2014/03/15 职场文书
可口可乐广告词
2014/03/20 职场文书
文明班级建设方案
2014/05/15 职场文书
公司合作意向书范文
2014/07/30 职场文书
中队活动总结
2014/08/27 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书