当前位置: 首页 > news >正文

Java使用okhttp发送get、post请求

一、添加依赖

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.4.1</version>
</dependency>

二、封装请求工具类

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
import java.util.concurrent.TimeUnit;@Slf4j
@SuppressWarnings("all")
public class OkHttpUtils {/*** 发送get请求** @param url* @param params* @param tClass* @return <T>*/public static <T> T getRequest(String url, Map<String, Object> params, Class<T> tClass) {return getRequest(url, null, params, tClass);}/*** 发送get请求** @param url* @param params* @param tClass* @return <T>*/public static <T> T getRequest(String url, Map<String, Object> headers, Map<String, Object> params, Class<T> tClass) {// 超时时间为60sOkHttpClient client = new OkHttpClient.Builder().connectTimeout(3, TimeUnit.MINUTES).readTimeout(3, TimeUnit.MINUTES).writeTimeout(3, TimeUnit.MINUTES)// 设置空闲连接数为0个,每个空闲连接的存活时间为1纳秒.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS)).protocols(Arrays.asList(Protocol.HTTP_1_1)).build();HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder();if (params != null) {params.forEach((k, v) -> {if (v != null) {httpBuilder.addQueryParameter(k, String.valueOf(v));}});}Request.Builder requestBuilder = new Request.Builder();if (headers != null) {headers.forEach((k, v) -> requestBuilder.addHeader(k, String.valueOf(v)));}Request request = requestBuilder.url(httpBuilder.build()).get().addHeader("Content-Type", "application/x-www-form-urlencoded").build();try {Response response = client.newCall(request).execute();String string = response.body().string();log.info("响应结果:" + string);if (response.code() == 504) {throw new IOException("请求超时,请您稍后重试!");}return JSON.parseObject(string, tClass);} catch (IOException e) {log.error(e.getMessage(), e);if (e.getMessage().contains("timeout"))throw new RuntimeException("请求超时,请您稍后重试!");else throw new RuntimeException(e.getMessage());} catch (Exception e) {log.error(e.getMessage(), e);throw new RuntimeException("系统错误,请您联系客服!");}}/*** 发送post请求,参数为json格式** @param url* @param jsonStr* @param tClass* @return <T>*/public static <T> T postRequest(String url, String jsonStr, Class<T> tClass) {return postRequest(url, null, jsonStr, tClass);}/*** 发送post请求,参数为json格式** @param url* @param headers* @param jsonStr* @param tClass* @return <T>*/public static <T> T postRequest(String url, Map<String, Object> headers, String jsonStr, Class<T> tClass) {OkHttpClient client = new OkHttpClient.Builder().connectTimeout(3, TimeUnit.MINUTES).readTimeout(3, TimeUnit.MINUTES).writeTimeout(3, TimeUnit.MINUTES)// 设置空闲连接数为0个,每个空闲连接的存活时间为1纳秒.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS)).protocols(Arrays.asList(Protocol.HTTP_1_1)).build();MediaType type = MediaType.parse("application/json;charset=utf-8");if (jsonStr == null || "".equals(jsonStr)) {jsonStr = "{}";}RequestBody requestBody = RequestBody.create(type, jsonStr);Request.Builder requestBuilder = new Request.Builder();if (headers != null) {headers.forEach((k, v) -> requestBuilder.addHeader(k, String.valueOf(v)));}Request request = requestBuilder.url(url).post(requestBody).addHeader("Content-Type", "application/json;charset=utf-8").build();try {Response response = client.newCall(request).execute();String string = response.body().string();log.info("响应结果:" + string);if (response.code() == 504) {throw new IOException("请求超时,请您稍后重试!");}return JSON.parseObject(string, tClass);} catch (IOException e) {log.error(e.getMessage(), e);if (e.getMessage().contains("timeout"))throw new RuntimeException("请求超时,请您稍后重试!");else throw new RuntimeException(e.getMessage());} catch (Exception e) {log.error(e.getMessage(), e);throw new RuntimeException("系统错误,请您联系客服!");}}/*** 发送post请求,参数为json格式** @param url* @param params* @param tClass* @return <T>*/public static <T> T postRequest(String url, Map<String, Object> params, Class<T> tClass) {return postRequest(url, null, params, tClass);}/*** 发送post请求,参数为json格式** @param url* @param headers* @param params* @param tClass* @return <T>*/public static <T> T postRequest(String url, Map<String, Object> headers, Map<String, Object> params, Class<T> tClass) {OkHttpClient client = new OkHttpClient.Builder().connectTimeout(3, TimeUnit.MINUTES).readTimeout(3, TimeUnit.MINUTES).writeTimeout(3, TimeUnit.MINUTES)// 设置空闲连接数为0个,每个空闲连接的存活时间为1纳秒.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS)).protocols(Arrays.asList(Protocol.HTTP_1_1)).build();MediaType type = MediaType.parse("application/json;charset=utf-8");String jsonStr = "{}";if (params != null && !params.isEmpty()) {jsonStr = JSON.toJSONString(params);}RequestBody requestBody = RequestBody.create(type, jsonStr);Request.Builder requestBuilder = new Request.Builder();if (headers != null) {headers.forEach((k, v) -> requestBuilder.addHeader(k, String.valueOf(v)));}Request request = requestBuilder.url(url).post(requestBody).addHeader("Content-Type", "application/json;charset=utf-8").build();try {Response response = client.newCall(request).execute();String string = response.body().string();log.info("响应结果:" + string);if (response.code() == 504) {throw new IOException("请求超时,请您稍后重试!");}return JSON.parseObject(string, tClass);} catch (IOException e) {log.error(e.getMessage(), e);if (e.getMessage().contains("timeout"))throw new RuntimeException("请求超时,请您稍后重试!");else throw new RuntimeException(e.getMessage());} catch (Exception e) {log.error(e.getMessage(), e);throw new RuntimeException("系统错误,请您联系客服!");}}/*** 发送post请求,参数为form格式** @param url* @param params* @param tClass* @return <T>*/public static <T> T postFormRequest(String url, Map<String, Object> params, Class<T> tClass) {return postFormRequest(url, null, params, tClass);}/*** 发送post请求,参数为form格式** @param url* @param headers* @param params* @param tClass* @return <T>*/public static <T> T postFormRequest(String url, Map<String, Object> headers, Map<String, Object> params, Class<T> tClass) {OkHttpClient client = new OkHttpClient.Builder().connectTimeout(3, TimeUnit.MINUTES).readTimeout(3, TimeUnit.MINUTES).writeTimeout(3, TimeUnit.MINUTES)// 设置空闲连接数为0个,每个空闲连接的存活时间为1纳秒.connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS)).protocols(Arrays.asList(Protocol.HTTP_1_1)).build();// 创建表单体FormBody.Builder formBodyBuilder = new FormBody.Builder();// 添加表单数据if (params != null) {params.forEach((k, v) -> {if (v != null) {String newVal = "";if (v instanceof String) {newVal = (String) v;} else {newVal = JSON.toJSONString(v);}formBodyBuilder.add(k, newVal);}});}FormBody formBody = formBodyBuilder.build();Request.Builder requestBuilder = new Request.Builder();if (headers != null) {headers.forEach((k, v) -> requestBuilder.addHeader(k, String.valueOf(v)));}Request request = requestBuilder.url(url).post(formBody).build();try {Response response = client.newCall(request).execute();String string = response.body().string();log.info("响应结果:" + string);if (response.code() == 504) {throw new IOException("请求超时,请您稍后重试!");}return JSON.parseObject(string, tClass);} catch (IOException e) {log.error(e.getMessage(), e);if (e.getMessage().contains("timeout"))throw new RuntimeException("请求超时,请您稍后重试!");else throw new RuntimeException(e.getMessage());} catch (Exception e) {log.error(e.getMessage(), e);throw new RuntimeException("系统错误,请您联系客服!");}}}

http://www.dtcms.com/a/565886.html

相关文章:

  • 两种上传图片的方式——91张先生
  • web3品牌RWA资产自主发行设计方案
  • 网站公司是做什么的长沙做网站备案
  • 【k8s】Kubernetes 资源限制设置规范手册 MB与MiB的概念混淆问题
  • 网站开发需要多长时间互联网有限公司
  • 撰写网站规划书网络服务示范区创建情况
  • 汇川高压变频故障码解析F134 F149 F150 F151 F154 F155 F157 F159 F160
  • 从 C 到 C++20 协程编写方法的演变。第一部分:函数 + 宏 = 协程
  • 采购管理软件选型避坑指南
  • 广州网站搭建多少钱网站的pv uv
  • ubuntu上安装交叉编译工具链说明
  • 【博资考5】网安2025
  • 怎样在别人网站做加强链接宁波网站推广专业服务
  • 做网站申请域名中国定制家具网
  • 合肥网站建设司图石家庄建设局网站怎么打不开
  • 开启学习具身智能之路
  • 使用husky+ commitlint检查提交描述是否符合规范要求
  • 【计算机软件资格考试】软考综合知识题高频考题及答案解析3
  • 达梦删除表空间的内部执行过程
  • 外贸建设网站合优做网站需要多少钱
  • 利用DeepSeek采用hugeint转字符串函数完善luadbi-duckdb的decimal处理
  • Memcached CAS 命令详解
  • 厦门市建设合同备案网站简约网站欣赏
  • 【Docker】关闭所有容器
  • 珠宝行网站建设方案搜索热度查询
  • Apache ShardingSphere-JDBC
  • 印刷网站建设网站建设总结ppt
  • 使用Qt Designer开发上位机
  • 嵌入式开发的“偷懒”高效艺术
  • 网站建设 优惠免费logo设计图