Java-http请求工具-OkHttp用法
前言:一般Java项目后端发送请求都使用http,最近项目里面大佬建议把http都改成okhttp3(OkHttpClient)。故今日记录部分常用发送方式。
代码:为了便于以后使用,这里封装一个OkHttpUtil的工具类
1、先导入jar包:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.9.0</version>
</dependency>
2、OkHttpUtil的工具类:
package cn.wj.fdata.util; import com.alibaba.fastjson.JSON;
import java.io.File;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.apache.commons.lang3.exception.ExceptionUtils; @Slf4j
public class OkHttpUtil { public static final MediaType jsonType = MediaType.parse("application/json; charset=utf-8"); public static final MediaType mediaType = MediaType.parse("application/octet-stream"); public final OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(8000, TimeUnit.MILLISECONDS)
.readTimeout(8000, TimeUnit.MILLISECONDS)
.build(); /**
* 发送post请求通过Form表单形式
*
* @param reqUrl 请求url
* @param mapParam 请求参数
*
*/
private void sendPostByForm(String reqUrl, Map<String,String> mapParam){
try {
long startTime = System.currentTimeMillis();
//循环form表单,将表单内容添加到form builder中
FormBody.Builder formBody = new FormBody.Builder();
for (Map.Entry<String, String> m : mapParam.entrySet()) {
String name = m.getKey();
String value = m.getValue()+"";
formBody.add(name, value);
}
//构建formBody(formBody.build()),将其传入Request请求中
Request.Builder builder = new Request.Builder().url(reqUrl).post(formBody.build());
try(Response response = okHttpClient.newCall(builder.build()).execute()){
String body = response.body().string();
log.info("{} response body:{}", reqUrl.substring(reqUrl.lastIndexOf("/") + 1),
body);
}catch(Exception e){
log.error("调用接口出错\n"+ ExceptionUtils.getMessage(e));
}finally{
long endTime = System.currentTimeMillis();
log.info("{} cost time:{}", reqUrl.substring(reqUrl.lastIndexOf("/") + 1),
(endTime - startTime));
}
} catch (Exception e) {
log.error("error", e);
}
} /**
* 发送post请求通过JSON参数
*
* @param reqUrl 请求url
* @param param 请求参数
*
*/
private void sendPostByJson(String reqUrl, Object param){
try {
String paramStr = JSON.toJSONString(param); RequestBody requestBody = RequestBody.create(jsonType, paramStr);
long startTime = System.currentTimeMillis();
Request.Builder builder = new Request.Builder().url(reqUrl).post(requestBody); try(Response response = okHttpClient.newCall(builder.build()).execute()){
String body = response.body().string();
}catch(Exception e){
log.error("调用接口出错\n"+ ExceptionUtils.getMessage(e));
}finally{
long endTime = System.currentTimeMillis();
log.info("{} cost time:{}", reqUrl.substring(reqUrl.lastIndexOf("/") + 1),
(endTime - startTime));
}
} catch (Exception e) {
log.error("error", e);
}
} /**
* 上传文件
*
* @param reqUrl 请求url
* @param file 上传的文件
* @param fileName 文件名称
*
*/
public void uploadFile(String reqUrl, File file, String fileName) {
try {
RequestBody fileBody = RequestBody.create(mediaType, file);
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("fileName", fileName)
.addFormDataPart("file", fileName, fileBody).build(); long startTime = System.currentTimeMillis();
Request.Builder builder = new Request.Builder().url(reqUrl).post(requestBody); try(Response response = okHttpClient.newCall(builder.build()).execute()){
String body = response.body().string();
}catch(Exception e){
log.error("调用接口出错\n"+ ExceptionUtils.getMessage(e));
}finally{
long endTime = System.currentTimeMillis();
log.info("{} cost time:{}", reqUrl.substring(reqUrl.lastIndexOf("/") + 1),
(endTime - startTime));
}
} catch (Exception e) {
log.error("error", e);
}
}
}
参考文章:
完!
Java-http请求工具-OkHttp用法的更多相关文章
- http请求工具-OkHttp用法
OKHttp介绍 okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCan ...
- Java http请求工具类
该工具类可以调用POST请求或者Get请求,参数以Map的方式传入,支持获获取返回值,返回值接收类型为String HttpRequestUtil.java package com.util; imp ...
- java HTTP请求工具
package HttpRequestTest; import java.io.BufferedReader; import java.io.InputStream; import java.io.I ...
- java http请求工具整理
处理了http 的get和post的请求,分别支持同步处理,异步处理两种方式下见代码. @Slf4jpublic class HttpUtils { /** * 同步请求http请求 不推荐 * * ...
- Java 发送 Https 请求工具类 (兼容http)
依赖 jsoup-1.11.3.jar <dependency> <groupId>org.jsoup</groupId> <artifactId>js ...
- Http请求工具类(Java原生Form+Json)
package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...
- java模板模式项目中使用--封装一个http请求工具类
需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...
- java jdk原生的http请求工具类
package com.base; import java.io.IOException; import java.io.InputStream; import java.io.InputStream ...
- Java 代码规范,你应该知道的一些工具和用法(转)
转自:http://yifeng.studio/2017/06/30/coding-with-code-style/ Java 代码规范,你应该知道的一些工具和用法 2017-06-30 从事编程这个 ...
- Java 代码规范,你应该知道的一些工具和用法
从事编程这个行业,你一定被别人说过或者说过别人这句话:代码要规范!求职面试时也能从 JD 上看到这个要求:要有良好的编程习惯.其实都是在讲代码规范(Code Style)这件事情. 每个人都有自己的编 ...
随机推荐
- Jenkins+Appium+Pytest+Allure集成
前提: 已经部署好了Jenkins环境,包括工具配置等 我的环境: Jenkins服务由安装在虚拟机上的Docker启动 Appium相关运行环境安装在虚拟机所在的主机上windows 方式:在Jen ...
- 【ADB命令】安装app
在电脑上安装以下指令 adb install app的文件位置
- 046_salesforce 中 Get URL
Suppose u have the whole URL as: < https://cs14.salesforce.com/apex/myVFpage?id=906F00000008w9wIA ...
- session共享问题、springboot 版本不统一问题
问题:按照正常的程序将session 共享引入工程,但是一直取不到 原因:springboot 的版本不同导致,存session的springboot 用的是springboot1.5.6,而取ses ...
- labwindows/cvi activex 控件无法正常使用问题解决
在进行labwindows/cvi编程时,想使用时间控件,需要在界面上点击右键的activex选项中选择Microsoft Data and Time picker control6.0(SP4).如 ...
- synchronized同步
package com.lei.syn; import java.util.ArrayList; import java.util.List; //线程不安全集合 public class Unsaf ...
- scottrade 手机应用中英文翻译
Dashboard Watch List 自选股 MARKET & NEWS 市场 & 新闻 ALERTS 警告 MONEY MOVEMENT BRANCH LOCAT ...
- flask中request请求中各种传参
from flask import Flask, request from werkzeug.datastructures import FileStorage app = Flask(__name_ ...
- vue实现自定义字体库
先看效果是不是你所需要的,再看具体如何实现. 效果如下图所示: 有些字体需要下载,用图片就会变得很不清楚,这样我们就需要去下载字体库,操作步骤如下: 首先找到需要下载的字体库 然后放在项目里面 然后定 ...
- Spring系列之面向切面编程-15
目录 AOP 概念 AOP 代理 @AspectJ 支持 启用@AspectJ 支持 使用 Java 配置启用 @AspectJ 支持 通过 XML 配置启用 @AspectJ 支持 声明一个方面 声 ...