IT评测·应用市场-qidao123.com

标题: java发送Http请求 [打印本页]

作者: 用户云卷云舒    时间: 2023-4-12 16:23
标题: java发送Http请求
使用java 11添加的HttpClient新API发送Http(Https)请求
HTTP客户端是在Java 11中添加的。它可以用于通过网络请求HTTP资源。它支持 HTTP / 1.1和HTTP / 2(同步和异步编程模型),将请求和响应主体作为反应流处理,并遵循熟悉的构建器模式。
参考文章:https://blog.csdn.net/allway2/article/details/112725692
Maven
  1. <dependency>
  2.     <groupId>com.alibaba</groupId>
  3.     <artifactId>fastjson</artifactId>
  4.     <version>1.2.83</version>
  5. </dependency>
复制代码
实例代码
  1. package org.example;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import javax.net.ssl.SSLContext;
  5. import javax.net.ssl.TrustManager;
  6. import javax.net.ssl.X509TrustManager;
  7. import java.io.IOException;
  8. import java.io.Serializable;
  9. import java.net.URI;
  10. import java.net.http.HttpClient;
  11. import java.net.http.HttpRequest;
  12. import java.net.http.HttpResponse;
  13. import java.security.KeyManagementException;
  14. import java.security.NoSuchAlgorithmException;
  15. import java.security.SecureRandom;
  16. import java.util.*;
  17. public class Main {
  18.     private static final TrustManager[] trustAllCerts = new TrustManager[]{
  19.             new X509TrustManager() {
  20.                 public java.security.cert.X509Certificate[] getAcceptedIssuers() {
  21.                     return null;
  22.                 }
  23.                 public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
  24.                 }
  25.                 public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
  26.                 }
  27.             }
  28.     };
  29.     private static final HttpClient client;
  30.     static {
  31.         // 允许不安全SSL连接
  32.         final Properties props = System.getProperties();
  33.         props.setProperty("jdk.internal.httpclient.disableHostnameVerification", Boolean.TRUE.toString());
  34.         SSLContext sslContext = null;
  35.         try {
  36.             sslContext = SSLContext.getInstance("TLS");
  37.             sslContext.init(null, trustAllCerts, new SecureRandom());
  38.             // 构建client实例
  39.             client = HttpClient.newBuilder()
  40.                     .sslContext(sslContext)
  41.                     .build();
  42.         } catch (NoSuchAlgorithmException | KeyManagementException e) {
  43.             throw new RuntimeException(e);
  44.         }
  45.     }
  46.     /**
  47.      * 发送get请求
  48.      * @param url url
  49.      * @param params path参数
  50.      * @return 响应体
  51.      */
  52.     public static JSONObject get(String url, Map<String, Object> params) {
  53.         // 拼接url
  54.         URI uri = disposeUrl(url, params);
  55.         // 构造get请求
  56.         HttpRequest req = HttpRequest.newBuilder(uri)
  57.                 .GET()
  58.                 .build();
  59.         try {
  60.             // 发送get请求
  61.             HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
  62.             return JSONObject.parseObject(res.body());
  63.         } catch (IOException | InterruptedException e) {
  64.             throw new RuntimeException(e);
  65.         }
  66.     }
  67.     /**
  68.      * 拼接url请求低质
  69.      * @param url url
  70.      * @param params 参数
  71.      * @return 完整url
  72.      */
  73.     private static URI disposeUrl(String url, Map<String, Object> params) {
  74.         StringBuilder sb = new StringBuilder(url);
  75.         if (params == null || params.keySet().size() == 0) return URI.create(url);
  76.         Set<String> keys = params.keySet();
  77.         sb.append("?");
  78.         keys.forEach(key -> sb.append(key).append("=").append(params.get(key)).append("&"));
  79.         return URI.create(sb.substring(0, sb.length() - 1));
  80.     }
  81.     /**
  82.      * 发送post请求
  83.      * @param url url
  84.      * @param data 参数
  85.      * @return 响应体
  86.      */
  87.     public static JSONObject post(String url, JSONObject data) {
  88.         return post(url, null, data);
  89.     }
  90.     /**
  91.      * 发送post请求
  92.      * @param url url
  93.      * @param params path参数
  94.      * @param data 请求体中的参数
  95.      * @return 响应体
  96.      */
  97.     public static JSONObject post(String url, Map<String, Object> params, JSONObject data) {
  98.         // 拼接uri
  99.         URI uri = disposeUrl(url, params);
  100.         // 构造post请求
  101.         HttpRequest req = HttpRequest.newBuilder(uri)
  102.                 .POST(HttpRequest.BodyPublishers.ofString(data.toString()))
  103.                 .build();
  104.         try {
  105.             // 发送post请求
  106.             HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
  107.             return JSONObject.parseObject(res.body());
  108.         } catch (IOException | InterruptedException e) {
  109.             throw new RuntimeException(e);
  110.         }
  111.     }
  112.     public static class keyValueRecord implements Serializable {
  113.         private String key;
  114.         private String value;
  115.         public keyValueRecord(String key, String value) {
  116.             this.key = key;
  117.             this.value = value;
  118.         }
  119.         public String getKey() {
  120.             return key;
  121.         }
  122.         public void setKey(String key) {
  123.             this.key = key;
  124.         }
  125.         public String getValue() {
  126.             return value;
  127.         }
  128.         public void setValue(String value) {
  129.             this.value = value;
  130.         }
  131.     }
  132.     public static void main(String[] args) {
  133.         // 获取token
  134.         Map<String, Object> params = new HashMap<>();
  135.         params.put("corpid", "xxx");
  136.         params.put("corpsecret", "xxx");
  137.         JSONObject json = get("https://qyapi.weixin.qq.com/cgi-bin/gettoken", params);
  138.         String access_token = json.getString("access_token");
  139.         // 获取审批单号
  140.         JSONObject data = new JSONObject();
  141.         Calendar cal = Calendar.getInstance();
  142.         cal.setTimeInMillis(System.currentTimeMillis());
  143.         cal.add(Calendar.DATE, -15);
  144.         data.put("starttime", String.valueOf(cal.getTime().getTime() / 1000));
  145.         data.put("endtime", String.valueOf(System.currentTimeMillis() / 1000));
  146.         data.put("cursor", 0);
  147.         data.put("size", 100);
  148.         JSONArray arr = new JSONArray();
  149.         arr.add(0, new keyValueRecord("sp_status", "1"));
  150.         arr.add(0, new keyValueRecord("template_id", "1970325103043160_1688851905330597_909052414_1534723908"));
  151.         data.put("filters", arr);
  152.         params = new HashMap<>();
  153.         params.put("access_token", access_token);
  154.         json = post("https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo", params, data);
  155.         JSONArray list = json.getJSONArray("sp_no_list");
  156.         // 获取审批单详细信息
  157.         for (int i = 0; i < list.size(); i++) {
  158.             String item = list.getString(i);
  159.             data = new JSONObject();
  160.             data.put("sp_no",item);
  161.             json = post("https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovaldetail", params, data);
  162.             System.out.println(json.toString());
  163.         }
  164.     }
  165. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4