http请求方式-OkHttpClient

  1. import com.example.core.mydemo.http.OrderReqVO;
  2. import okhttp3.*;
  3. import org.slf4j.Logger;
  4. import org.slf4j.LoggerFactory;
  5. import org.springframework.util.CollectionUtils;
  6.  
  7. import java.io.IOException;
  8. import java.util.Iterator;
  9. import java.util.Map;
  10. import java.util.concurrent.TimeUnit;
  11.  
  12. public class OkHttpClient {
  13. private static Logger log = LoggerFactory.getLogger(OkHttpClient.class);
  14.  
  15. private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
  16.  
  17. private volatile static okhttp3.OkHttpClient client;
  18.  
  19. private static final int MAX_IDLE_CONNECTION = 2;
  20. private static final long KEEP_ALIVE_DURATION = 2;
  21. private static final long CONNECT_TIMEOUT = 1000;
  22. private static final long READ_TIMEOUT = 3000;
  23.  
  24. /**
  25. * 单例模式(双重检查模式) 获取类实例
  26. *
  27. * @return client
  28. */
  29. private static okhttp3.OkHttpClient getInstance() {
  30. if (client == null) {
  31. synchronized (okhttp3.OkHttpClient.class) {
  32. if (client == null) {
  33. client = new okhttp3.OkHttpClient.Builder()
  34. .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
  35. .readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
  36. .connectionPool(new ConnectionPool(MAX_IDLE_CONNECTION, KEEP_ALIVE_DURATION,
  37. TimeUnit.MINUTES))
  38. .build();
  39. }
  40. }
  41. }
  42. return client;
  43. }
  44.  
  45. public static String syncPost(String url, String json) throws IOException {
  46. RequestBody body = RequestBody.create(JSON, json);
  47. Request request = new Request.Builder()
  48. .url(url)
  49. .post(body)
  50. .build();
  51. try {
  52. Response response = OkHttpClient.getInstance().newCall(request).execute();
  53. if (response.isSuccessful()) {
  54. String result = response.body().string();
  55. log.info("syncPost response = {}, responseBody= {}", response, result);
  56. return result;
  57. }
  58. String result = response.body().string();
  59. log.info("syncPost response = {}, responseBody= {}", response, result);
  60. throw new IOException("三方接口返回http状态码为" + response.code());
  61. } catch (Exception e) {
  62. log.error("syncPost() url:{} have a ecxeption {}", url, e);
  63. throw new RuntimeException("syncPost() have a ecxeption {}" + e.getMessage());
  64. }
  65. }
  66.  
  67. public static String syncGet(String url, Map<String, Object> headParamsMap) throws IOException {
  68. Request request;
  69. final Request.Builder builder = new Request.Builder().url(url);
  70. try {
  71. if (!CollectionUtils.isEmpty(headParamsMap)) {
  72. final Iterator<Map.Entry<String, Object>> iterator = headParamsMap.entrySet()
  73. .iterator();
  74. while (iterator.hasNext()) {
  75. final Map.Entry<String, Object> entry = iterator.next();
  76. builder.addHeader(entry.getKey(), (String) entry.getValue());
  77. }
  78. }
  79. request = builder.build();
  80. Response response = OkHttpClient.getInstance().newCall(request).execute();
  81. String result = response.body().string();
  82. log.info("syncGet response = {},responseBody= {}", response, result);
  83. if (!response.isSuccessful()) {
  84. throw new IOException("三方接口返回http状态码为" + response.code());
  85. }
  86. return result;
  87. } catch (Exception e) {
  88. log.error("remote interface url:{} have a ecxeption {}", url, e);
  89. throw new RuntimeException("三方接口返回异常");
  90. }
  91. }
  92.  
  93. public static void main(String[] args) {
  94. OrderReqVO data = new OrderReqVO();
  95. data.setOrderNum("111123333");
  96. data.setServerType("1");
  97.  
  98. String url = "https://域名/接口名称";
  99.  
  100. try {
  101. String resp = syncPost(url, com.alibaba.fastjson.JSON.toJSONString(data));
  102. System.out.println("resp = " + resp);
  103.  
  104. } catch (IOException e) {
  105. e.printStackTrace();
  106. }
  107.  
  108. }
  109.  
  110. }

http请求方式-OkHttpClient的更多相关文章

  1. http常见的get请求方式和set请求方式。

    一.Get请求方式 以下是我写的一个用get请求方式获取api工厂中汇率的类. package com.example; import java.io.BufferedReader; import j ...

  2. 使用 http 请求方式获取 eureka server的服务信息

    对于一些系统不能接入 eureka server,又需要访问接入eureka server 的服务. 方法一:直接调用服务的地址是一种实现方式,弊端就是地址是写死的,万一服务地址变更则访问不到. 方法 ...

  3. 限制action所接受的请求方式或请求参数

    原文:http://www.cnblogs.com/liukemng/p/3726897.html 2.限制action所接受的请求方式(get或post): 之前我们在HelloWorldContr ...

  4. Android——JDK的get请求方式

    layout文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  5. 第二节(RequestMapping请求方式)学习尚硅谷-springmvc视频教程

    项目中,创建测试类SpringMVCTest @Controller @RequestMapping("/springmvc1") public class SpringMVCTe ...

  6. jQuery中ajax的4种常用请求方式

    jQuery中ajax的4种常用请求方式: 1.$.ajax()返回其创建的 XMLHttpRequest 对象. $.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数 ...

  7. js中同步与异步请求方式

    异步请求方式: $.ajax({ url : 'your url', data:{name:value}, cache : false, async : true, type : "POST ...

  8. WEB API 中HTTP的get、post、put,delete 请求方式

    一.WEB API 中HTTP 请求方式的四个主要方法 (GET, PUT, POST, DELETE), 按照下列方式映射为 CURD 操作: 1.POST 用于新建资源,服务端在指定的URI 上创 ...

  9. Ajax中的get和post两种请求方式的异同

    Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.   1. get是把参数数据队列加到提交表单的A ...

  10. HTTP 请求方式: GET和POST的比较(转)

    GET和POST是HTTP的两个常用方法.   什么是HTTP? 超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议 ...

随机推荐

  1. [FAQ] Sortable 拖拽组件, 火狐浏览器中打开新窗口问题

      Q:用了 sortable 组件,在火狐浏览器中进行拖拽时,会打开新窗口 ? Sortable组件地址,https://github.com/SortableJS/Sortable 当前处理方式 ...

  2. VSCode 打开ESP32工程问题

    一.无法跳转 问题现象: 打开ESP32工程头文件提示波浪线不跳转,如下图所示: 解决办法: 删除工程中.vsccode文件夹下的所有文件 VSCode 中打开命令行搜索 ESP-IDF 找到`添加 ...

  3. Solution Set - SAM

    讲解一些 SAM 经典的应用.可以结合 字 符 串 全 家 桶 中 SAM 的部分食用. 洛谷P2408 求不同子串个数.在 SAM 中,所有结点是一个等价类,包含的字符串互不相同.结点 \(u\) ...

  4. 【web安全】隐藏nginx头文件信息

    摘要 Nginx作为开源web中间件,被广泛应用.因此源编译或者yum安装,都会带有其原有的nginx版本.很容易被针对,因此,通过修改nginx的源码.隐藏nginx版本和头部信息,保障nginx的 ...

  5. js图片懒加载,在不做分页的情况下的解决方案

    Intersection Observer API 1.注意点 一般都是后端返回数据, 用 this.$nextTick(() => { this.handleScroll(); }); 确保d ...

  6. VNC 远程桌面很卡,替代方案如下

    VNC 远程桌面是一款古老的远程桌面软件,是基于 Unix 和 Linux 操作系统的免费的开源软件.免费开源很好,但是 VNC 也存在一些缺点. 1.VNC 远程桌面很卡 想白嫖 VNC,就要接受卡 ...

  7. .NET 采用开源软件OpenOffice 实现文档转码服务(word ppt excel)转PDF

    前言 前几年做了个项目,里面有个需求,需要在浏览器中在线浏览word excel ppt  pdf等文档. 最近又开始研究并记录下来 当时方案: 因为浏览器中阅读文档暂时只能通过pdf方式读取,所以就 ...

  8. LLM实战:LLM微调加速神器-Unsloth + Qwen1.5

    1. 背景 上一篇介绍了基于训练加速框架Unsloth,微调训练Llama3的显卡资源占用及训练时间对比. 近期Unsloth新增了Qwen1.5的模型适配,因此本qiang~马不停蹄地又进行了一次实 ...

  9. C#的GroupBy方法是如何工作的

    前言:先贴结果 GroupBy方法是如何工作的? 一.准备6个待分组的学生对象 class student { public string name;//姓名 public int grade;//年 ...

  10. 微信小程序 canvas 手写签名(2d)

    canvas 2d 目前支持预览,不支持真机调试 index.wxml <canvas type="2d" id="canvas" bindtouchmo ...