背景
在开发场景中我们会遇到需要调用其它系统功能的场景,调用异构系统的功能,调用中间件的api,一般都是走内网或者本地的http请求,那么选择一种开发效率高的http请求就很重要了。
参考资料
https://zhuanlan.zhihu.com/p/69285935 Java 实现 HTTP 请求的三种方式
https://www.cnblogs.com/javazhiyin/p/9851775.html Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
https://segmentfault.com/a/1190000038265834 适用于SpringBoot项目的轻量级HTTP客户端框架retrofit-spring-boot-starter
http://forest.dtflyx.com/docs/ Forest 是一个开源的 Java HTTP 客户端框架
https://www.jianshu.com/p/da4a806e599b Okhttp3基本使用
https://square.github.io/okhttp/ okhttp官网
解决方案
可以分为两种场景分析,场景一:访问的地址是固定的,只是参数不固定就可以选择封装的深一点的框架如Forest,retrofit,个人推荐前者。场景二:访问的ip、端口、参数设置都是非常灵活的就使用okhttp,可以传参式的调用。
forest
http://forest.dtflyx.com/docs/usage,直接看这里的内容,就十分详细了。
okhttp
demo一个发送post请求的案例
public static final MediaType JSON
= MediaType.get("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
String post(String url, String json) throws IOException {
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
开发踩坑
请求返回415代号的错误
实际上是发送请求的时候没有设置内容类型,服务端收到不知道该怎么解析了。
具体可以参看这篇博客:https://blog.csdn.net/majinggogogo/article/details/78383772
通过这个问题,想查看更多的http请求头的信息请参考:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Keep-Alive