• http请求工具类


     一、添加依赖

    1. <dependency>
    2. <groupId>com.squareup.okhttp3</groupId>
    3. <artifactId>okhttp</artifactId>
    4. <version>4.9.1</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.alibaba</groupId>
    8. <artifactId>fastjson</artifactId>
    9. <version>1.2.40</version>
    10. </dependency>
    11. <dependency>
    12. <groupId>org.apache.commons</groupId>
    13. <artifactId>commons-lang3</artifactId>
    14. <version>3.11</version>
    15. </dependency>

    二、工具类

    1. import com.alibaba.fastjson.JSON;
    2. import com.alibaba.fastjson.JSONObject;
    3. import lombok.extern.slf4j.Slf4j;
    4. import okhttp3.*;
    5. import org.apache.commons.io.FileUtils;
    6. import org.springframework.web.multipart.MultipartFile;
    7. import java.io.File;
    8. import java.io.IOException;
    9. import java.util.Map;
    10. import java.util.Objects;
    11. import java.util.concurrent.TimeUnit;
    12. @Slf4j
    13. public class OkHttpUtil {
    14. public static final String MEDIA_TYPE_JSON = "application/json; charset=utf-8";
    15. private OkHttpUtil() {
    16. }
    17. /**
    18. * 获取默认的OkHttpClient
    19. *
    20. * @return
    21. */
    22. public static OkHttpClient getOkHttpClient() {
    23. return getOkHttpClient(60, 60, 60);
    24. }
    25. public static OkHttpClient getOkHttpClient(int connectTimeout, int readTimeOut, int writeTimeOut) {
    26. OkHttpClient.Builder builder = new okhttp3.OkHttpClient().newBuilder();
    27. builder.connectTimeout(connectTimeout, TimeUnit.SECONDS);
    28. builder.readTimeout(readTimeOut, TimeUnit.SECONDS);
    29. builder.writeTimeout(writeTimeOut, TimeUnit.SECONDS);
    30. return builder.build();
    31. }
    32. /**
    33. * get请求
    34. *
    35. * @param okHttpClient
    36. * @param url
    37. * @param headers header参数
    38. * @return
    39. */
    40. public static String get(OkHttpClient okHttpClient, String url, Headers headers) {
    41. log.info("okHttpClient get url:{}.", url);
    42. Request request = new Request.Builder().url(url).headers(headers).get().build();
    43. String responseData = request(okHttpClient, url, request);
    44. log.info("okHttpClient get url:{},request responseData====> {}", url, responseData);
    45. return responseData;
    46. }
    47. public static String get(OkHttpClient okHttpClient, String url) {
    48. Headers headers = new Headers.Builder().build();
    49. return get(okHttpClient, url, headers);
    50. }
    51. /**
    52. * GET请求。使用默认的 okHttpClient 和 headers
    53. *
    54. * @param url
    55. * @return
    56. */
    57. public static String get(String url) {
    58. OkHttpClient okHttpClient = getOkHttpClient();
    59. Headers headers = new Headers.Builder().build();
    60. return get(okHttpClient, url, headers);
    61. }
    62. /**
    63. * post请求,获取响应结果
    64. *
    65. * @param okHttpClient
    66. * @param url
    67. * @param bodyJson
    68. * @param headers
    69. * @return
    70. */
    71. public static String post(OkHttpClient okHttpClient, String url, JSONObject bodyJson, Headers headers) {
    72. log.info("okHttpClient post url:{}, body====> {}", url, bodyJson);
    73. MediaType mediaTypeJson = MediaType.parse(MEDIA_TYPE_JSON);
    74. RequestBody requestBody = RequestBody.create(mediaTypeJson, JSON.toJSONString(bodyJson));
    75. Request request = new Request.Builder().url(url).headers(headers).post(requestBody).build();
    76. String responseData = request(okHttpClient, url, request);
    77. log.info("okHttpClient post url:{},post responseData====> {}", url, responseData);
    78. return responseData;
    79. }
    80. public static String post(OkHttpClient okHttpClient, String url, JSONObject bodyJson) {
    81. Headers headers = new Headers.Builder().build();
    82. return post(okHttpClient, url, bodyJson, headers);
    83. }
    84. /**
    85. * post请求。使用默认的 okHttpClient 和 headers
    86. *
    87. * @param url
    88. * @param bodyJson
    89. * @return
    90. */
    91. public static String post(String url, JSONObject bodyJson) {
    92. //使用默认的 okHttpClient
    93. OkHttpClient okHttpClient = getOkHttpClient();
    94. Headers headers = new Headers.Builder().build();
    95. //如果需要自定义 okHttpClient或headers传参,可以调用以下方法
    96. return post(okHttpClient, url, bodyJson, headers);
    97. }
    98. /**
    99. * 获取响应结果
    100. *
    101. * @param okHttpClient
    102. * @param url
    103. * @param request
    104. * @return
    105. */
    106. public static String request(OkHttpClient okHttpClient, String url, Request request) {
    107. String responseData = "";
    108. try (Response response = okHttpClient.newCall(request).execute()) {
    109. if (response != null && response.body() != null) {
    110. return response.body().string();
    111. }
    112. } catch (Exception e) {
    113. log.error("okHttpClient getResponse error.url:{}", url, e);
    114. }
    115. return responseData;
    116. }
    117. /**
    118. * 上传文件
    119. *
    120. * @param okHttpClient okHttp客户端
    121. * @param url 上传文件的url
    122. * @param fileKey 文件对应的key
    123. * @param formDataJson form-data参数
    124. * @param headers
    125. * @param file
    126. * @return
    127. */
    128. public static String uploadFile(OkHttpClient okHttpClient, String url,
    129. String fileKey, File file, JSONObject formDataJson, Headers headers) {
    130. log.info("uploadFile url:{}, uploadFile formDataJson====> {}", url, formDataJson);
    131. // 支持传文件的同时,传参数。
    132. MultipartBody requestBody = getMultipartBody(fileKey, file, formDataJson);
    133. // 构建request请求体
    134. Request request = new Request.Builder().url(url).headers(headers).post(requestBody).build();
    135. String responseData = request(okHttpClient, url, request);
    136. // 会在本地产生临时文件,用完后需要删除
    137. if (file.exists()) {
    138. file.delete();
    139. }
    140. return responseData;
    141. }
    142. /**
    143. * 上传文件
    144. *
    145. * @param url
    146. * @param fileKey form-data文件对应的key
    147. * @param multipartFile 文件上传对应的 multipartFile
    148. * @param formDataJson form-data参数
    149. * @return
    150. */
    151. public static String uploadFile(String url,
    152. String fileKey, MultipartFile multipartFile, JSONObject formDataJson) {
    153. //使用默认的okHttpClient
    154. OkHttpClient okHttpClient = getOkHttpClient();
    155. Headers headers = new Headers.Builder().build();
    156. return uploadFile(okHttpClient, url, fileKey, getFile(multipartFile), formDataJson, headers);
    157. }
    158. public static String uploadFile(OkHttpClient okHttpClient, String url,
    159. String fileKey, File file, JSONObject formDataJson) {
    160. Headers headers = new Headers.Builder().build();
    161. return uploadFile(okHttpClient, url, fileKey, file, formDataJson, headers);
    162. }
    163. /**
    164. * 上传文件
    165. * 使用默认的okHttpClient
    166. *
    167. * @param url
    168. * @param fileKey form-data文件对应的key
    169. * @param file 文件
    170. * @param formDataJson form-data参数
    171. * @return
    172. */
    173. public static String uploadFile(String url,
    174. String fileKey, File file, JSONObject formDataJson) {
    175. //使用默认的okHttpClient
    176. OkHttpClient okHttpClient = getOkHttpClient();
    177. Headers headers = new Headers.Builder().build();
    178. return uploadFile(okHttpClient, url, fileKey, file, formDataJson, headers);
    179. }
    180. /**
    181. * 上传文件用。构建form-data 参数
    182. *
    183. * @param fileKey 文件对应的key
    184. * @param file 文件
    185. * @param formDataJson form-data参数
    186. * @return
    187. */
    188. public static MultipartBody getMultipartBody(String fileKey, File file, JSONObject formDataJson) {
    189. RequestBody fileBody = RequestBody.create(MultipartBody.FORM, file);
    190. MultipartBody.Builder bodyBuilder = new MultipartBody.Builder();
    191. // 设置传参为form-data格式
    192. bodyBuilder.setType(MultipartBody.FORM);
    193. bodyBuilder.addFormDataPart(fileKey, file.getName(), fileBody);
    194. // 添加 form-data参数
    195. for (Map.Entry<String, Object> entry : formDataJson.entrySet()) {
    196. //参数通过 bodyBuilder.addFormDataPart(key, value) 添加
    197. bodyBuilder.addFormDataPart(entry.getKey(), Objects.toString(entry.getValue(), ""));
    198. }
    199. return bodyBuilder.build();
    200. }
    201. /**
    202. * 获取文件
    203. *
    204. * @param multipartFile
    205. * @return
    206. */
    207. public static File getFile(MultipartFile multipartFile) {
    208. File file = new File(Objects.requireNonNull(multipartFile.getOriginalFilename()));
    209. try {
    210. FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);
    211. } catch (IOException e) {
    212. log.error("copyInputStreamToFile error.", e);
    213. }
    214. return file;
    215. }
    216. }

  • 相关阅读:
    一文了解Web3.0真实社交先驱ERA
    《python》paramiko+paramiko实现远程通过ssh通道连接数据库
    从vue(v2.7.10)源码分析vue是如何收集依赖和触发依赖
    java172-使用class实现反射编程,创建对象
    【功能测试】-【黑盒测试用例】
    聊聊几位大厂清华同学的近况
    SAP 标准表
    (新)Spring Security如何自定义失败处理器
    模仿蜘蛛工作原理 苏黎世联邦理工学院研发牛油果机器人可在雨林树冠穿行
    HTTPS一定安全吗
  • 原文地址:https://blog.csdn.net/bankq/article/details/133703389