简介

现在大多数的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. SpringBoot:常用属性汇总
  2. java uml图中的关系_UML类图中的关系
  3. 听大佬学长RQY报告有感
  4. Flutter实战之图片圆角和圆形简单实现
  5. 狂雨小说(KYXS)CMS 代码审计
  6. 2004-2020历年美赛优秀论文资源
  7. FastStone Capture7.0注册码
  8. VMware中Linux虚拟机root密码重置
  9. 视频像素、分辨率、清晰度关系及区别
  10. android 检查电话号码是否合理(含大陆和香港格式)
  11. Conventional-path insert(传统路径插入)
  12. python求周长_计算任何三角形的周长[python 3]
  13. 新房和二手房税费比较
  14. 元宵节主题微信红包封面序列号免费领取!
  15. SVG绘制文字特效 html+css
  16. test api mis
  17. yami认证显示连接服务器失败,yamip安装教程
  18. python循环语句打印三角形_python循环输出三角形图案的例子
  19. c4d python使用方法_c4d 有没有python的技术说明文档_c4d python插件安装教程
  20. 智慧城市同城V4 v2.1.7 同城 同城小程序 同城信息

热门文章

  1. 能够拿到100万年薪的程序员都具备哪些能力?
  2. 如师通语言学习软件(罗赛塔石碑)/Rosetta Stone 安装方法
  3. 计算机二级WPS 选择题(模拟和解析八)
  4. TurboGate反垃圾邮件网关的专业方案
  5. 我走了,青春留给北京
  6. UE4——有关于Windows RawInput插件和Vendor ID/Product ID
  7. 定制家具整体运营管理--建设方案
  8. Intel虚拟化技术(Intel VT-x)
  9. 诚之和:困在数字里的蜜雪冰城,被迫IPO
  10. 论文研读 “Liar, Liar Pants on Fire”:A New Benchmark Dataset for Fake News Detection