简介

现在大多数的http请求都是使用 restful 风格,系统之间的交流也是使用 restful 风格的http请求,所以就写了一个工具类来简化这些工作。

点击查看工具类代码
这个工具类是基于 HttpURLConnection 写的。
并依赖 jackson 对 json 进行解析,你可以在代码里改成其它的 json 解析工具。

使用方法

  • 请求示例
try {//发送GET请求获取用户信息,默认GET请求RestfulHttpClient.HttpResponse response = RestfulHttpClient.getClient("http://localhost/user/{id}").addPathParam("id", "100").request();if(response.getCode() == 200){User user = response.getContent(User.class);}
} catch (IOException e) { }try {//发送PUT请求更新用户信息RestfulHttpClient.HttpResponse response = RestfulHttpClient.getClient("http://localhost/user/{id}").put().addPathParam("id", "100").body(user).request();if(response.getCode() == 200){String result = response.getContent();}
} catch (IOException e) { }try {/*-- 2019-4-16 新增:发送异步请求 --*///发送异步请求Future<HttpResponse> future = getClient("https://www.baidu.com").asyncRequest();System.out.println("do something else");RestfulHttpClient.HttpResponse response = future.get();if(response.getCode() == 200){String result = response.getContent();}
} catch (IOException | InterruptedException | ExecutionException e) { }
  • 文件下载
 // 指定响应结果为文件流之后,返回的响应对象为 HttpResponseStreamHttpResponseStream request = (HttpResponseStream) RestfulHttpClient.getClient("http://down10.zol.com.cn/office/gongzibiao.rar")// 指定响应结果为文件流.download()// 发起请求.request();if (request.getCode() == 200) {// 文件名,自动识别,可能为空System.out.println(request.getFilename());// 文件大小,如果为-1或0是服务器端没返回文件大小System.out.println(request.getFileLength());// 保存文件,下载几种方式只能使用一种,保存之后不能再使用这些方法// 保存为指定文件request.saveTo("D:/test.rar");// 保存到指定目录,文件名为自动识别的文件名request.saveTo("D:/");// 保存到指定目录下,并指定文件名request.saveTo("D:/download", "test.rar");// 输出到指定输出流request.saveTo(new ByteArrayOutputStream());// 直接获取影响数据byte[] data = request.getData();} else {// 下载失败,输出结果System.out.println(request.getContent());}
  • 创建一个请求客户端
RestfulHttpClient.HttpClient client = RestfulHttpClient.getClient(url);
  • 设置请求方式
    默认GET请求
client.get();
client.post();
client.put();
client.patch();
client.delete();
  • 设置请求头
// 设置全局默认请求头,每次请求都会带上这些请求头
RestfulHttpClient.setDefaultHeaders(headersMap);// -- 设置本次请求头 --
//添加多个请求头
client.addHeaders(headersMap);
//添加一个请求头
client.addHeader("key", "value");
//重置请求头,会保留全局默认请求头
client.headers(headersMap);
  • 添加 url 路径参数 pathParams
    什么是路径参数,如:http://localhost/user/{id} 中的id
//添加一个参数,最后请求url变为:http://localhost/user/100
client.addPathParam("id", "100");
//添加多个参数,不会清空原来的参数
client.postParams(paramsMap);
  • 添加请求参数 queryParams
    什么是请求参数,请求参数就是url问号后面的参数,如http://localhost/user?page=1&rows=10 中的 page=1&rows=10
//原请求url为:http://localhost/user
//最终请求url为:http://localhost/user?page=1
client.addQueryParam("page", "1");
//添加多个参数,不会清空原来的参数
client.queryParams(paramsMap);
  • 添加表单参数 postParams
    什么是表单参数,表单参数跟请求参数的形式一样name1=value1&name2=value2,不过不是通过url地址后面问号提交,而是通过请求体提交,如 post 提交
//添加一个参数,不会清空原来的参数
client.addPostParam("page", "1");
//添加多个参数,不会清空原来的参数
client.postParams(paramsMap);
  • 添加请求体参数 body
    什么是请求体,不懂请求百度http 请求体
    请求体参数可以是一个值或一个对象,如果是对象最终会转为json字符串提交。
    请求体参数body与表单参数postParams,不能同时添加,如果同时添加了两个参数最终只会发送请求体参数body。
//添加请求体,如果重复添加会覆盖之前的值
client.body(obj);
  • 发起请求并获取响应结果
//发起请求,获取响应结果
RestfulHttpClient.HttpResponse response = client.request();
//根据状态码判断请求是否成功
if(response.getCode() == 200){//获取响应内容String result = response.getContent();
}
  • 添加https请求信任
//添加全局信任
RestfulHttpClient.addInitializer(new TrustAllHttpsInitializer());//本次请求添加信任
RestfulHttpClient.HttpResponse response = RestfulHttpClient.getClient(url).addInitializer(new TrustAllHttpsInitializer()).request(); //发起请求
  • 添加自定义https证书认证
    实现 RestfulHttpClient.URLConnectionInitializer 接口,并添加到 RestfulHttpClient.addInitializer(URLConnectionInitializer)
public class MyConnectionInitializer implements RestfulHttpClient.URLConnectionInitializer {@Overridepublic HttpURLConnection init(HttpURLConnection connection, RestfulHttpClient.HttpClient client) {//添加证书return connection;}
}// 证书设置全局请求有效
RestfulHttpClient.addInitializer(new MyConnectionInitializer());
// 证书只有本次请求有效
RestfulHttpClient.getClient(url).addInitializer(new MyConnectionInitializer()).request();

Http请求 RestfulApi请求工具类 RestfulHttpClient相关推荐

  1. ios开发循环网络请求_GitHub - JadenTeng/ResourceX: iOS网络请求,网络泛型编程,工具类的封装,基于AFNetworking 实现, NSCache数据缓存...

    ResourceX 通过AFNetworking.YYModel 解析网络泛型编程简化网络请求 现如今,网络通信几乎涉及每一个app程序.对于绝大多数请求HTTP API的方法,它们的执行流程都可以分 ...

  2. android httputils更换成https请求,Android开发工具类之HttpUtils

    今天我们讲常用的开发工具类之HttpUtils,我发现上两次,我对于每个方法都进行了一定的解释,有人跟我评论和留言说,不用我解释,这么简单,这么明显的使用方法,再笨的人也能看懂,多此一举,好吧,这次我 ...

  3. java代码post接口请求 用 hutool工具类

    package com.byd.com;import cn.hutool.http.HttpRequest; import cn.hutool.json.JSONObject;public class ...

  4. 从服务器请求文件流工具类,SpringBoot我想获取图片流,然后将图片流的数据传到服务器上...

    我想获取图片流,然后将图片流的数据传到服务器上 这行好像是获取图片流的,但是这个buffers我怎么传递给服务器 我想把buffers作为参数传给口,不知道怎么实现?ByteBuffer buffer ...

  5. javascript常用工具类的封装

    目录 一.js数组工具类 工具类方法 工具类代码 测试MyArrayFn中的所有方法 二.js字符串校验工具类 工具类方法 工具类代码 三.js时间Date工具类 工具类方法 工具类代码 四.js浏览 ...

  6. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  7. 史上最全的开发工具类

    银行卡管理 → BankCheck checkBankCard : 校验银行卡卡号是否合法 getBankCardCheckCode: 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 ge ...

  8. httpclient工具类,post请求发送json字符串参数,中文乱码处理

    在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...

  9. Java 调用接口工具类并设置请求和传输超时时间

    废话不多说直接上代码 /*** 接口调用工具类* @Author: MonsterTiny* @Date: 2020-07-23 10:06*/ public class HttpClientUtil ...

最新文章

  1. 华北理工大学轻工学院计算机在哪个校区,如何坐公交去路北区的华北理工大学轻工学院(北校区)-行政综合楼| Moovit...
  2. 蓝桥杯-数字三角形 (java)
  3. 携手Visa IBM Watson IoT加速互联设备转化为潜在销售点
  4. TO C AND TO B IN TERMS OF CUSTOMER
  5. C#:泛型Range助手
  6. 12-6路径的其他操作
  7. 【数据分析】基于matlab GUI图书管理系统【含Matlab源码 603期】
  8. R语言_安装包时联网失败
  9. 桌面客户端上登入Gmai 邮箱
  10. Lingo基本使用方法
  11. Python实现多个Excel文件合并到一个文件中
  12. School Regional Team Contest, Saratov, 2011-F. Spiders-求树直径
  13. 腾讯招python吗_#python 爬取腾讯招聘技术类的招聘信息
  14. BEV感知,是下一代自动驾驶感知算法风向吗?
  15. 网易云音乐部门技术面
  16. 微信小程序开发者问题集锦
  17. 用python解决数学问题
  18. 《解剖PetShop》系列之五
  19. (论文阅读笔记)OLE:正交低秩嵌入,即插即用的几何损失
  20. Discuz论坛下载与安装

热门文章

  1. Web2.0,欢迎进入加密世界 | Props 亚洲峰会
  2. fireworks常用快捷键
  3. android7.0版本更新出现解析包错误问题,求帮助
  4. 2019最新《后盾网Thinkphp5博客项目实战教程》
  5. android系统之apn相关
  6. PLMN selection
  7. 写高效的JavaScript程序
  8. 【css】字体渐变色,边框渐变色等笔记,按钮渐变色等持续更新~~
  9. C#实现【串口助手】【入门级别】【小白进】
  10. WiFi吞吐量的测试