Java实现调用对方http接口得到返回数据

作者:peachlf 时间:2023-02-27 22:36:29 

Java 用对方http接口得到返回数据

如图所示我们这里自己写一个接口作为访问地址,返回的是json字符串

Java实现调用对方http接口得到返回数据

首先我们在浏览器访问这个接口的地址,会在浏览器打印出如图所示的内容,

Java实现调用对方http接口得到返回数据

然后我们写一个方法访问刚刚的接口地址,使用HttpURLConnextion进行访问,通过BufferedReader获取流,已得到返回的值

Java实现调用对方http接口得到返回数据

运行这个方法,会在控制台打印出接口返回的值,也可以进行相应的操作

Java实现调用对方http接口得到返回数据

如图所示是第二种方法,通过URL进行连接,然后通过openStream方法获取返回值的流转为BufferedReader,然后进行相应的操作

Java实现调用对方http接口得到返回数据

接着赋值url接口地址后,运行后结果如图所示,这里还可以使用jsonfrom等方法对获取的返回值进行json解析,以更方便操作

Java实现调用对方http接口得到返回数据

java后台工具类调用api接口,解析数据

httpclient后台调用接口,解析数据

一 、 引入jar包


       <dependency>
           <groupId>org.apache.httpcomponents</groupId>
           <artifactId>httpclient</artifactId>
           <version>4.5.3</version>
       </dependency>
        <!-- JSON转换包 -->
       <dependency>
           <groupId>net.sf.json-lib</groupId>
           <artifactId>json-lib</artifactId>
           <version>2.4</version>
           <classifier>jdk15</classifier>
       </dependency>

二、 httpclient请求接口工具类

2.1 get、post、“head”, “options”, “delete”, "trace"等方式


public class HttpClient {
   /**
    * 向目的URL发送post请求
    *
    * @param url          目的url
    * @param headerParams 请求头参数 key:value
    * @param bodyParams   请求体参数  key:value
    * @return
    */
   public static String sendPostRequest(String url, Map<String, String> headerParams,
                                        Map<String, String> bodyParams) {
       RestTemplate client = new RestTemplate();
       //新建Http头,add方法可以添加参数
       HttpHeaders headers = new HttpHeaders();
       //给请求头设置参数
       for (String key : headerParams.keySet()) {
           headers.add(key, headerParams.get(key));
       }
       //设置请求发送方式HttpMethod.GET、HttpMethod.DELETE等
       HttpMethod method = HttpMethod.POST;
       // 设置提交方式这里设置成application/json格式
       headers.setContentType(MediaType.APPLICATION_JSON);
       //将请求头部和参数合成一个请求
       HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(bodyParams, headers);
       //执行HTTP请求,将返回的结构使用String 类格式化(可设置为对应返回值格式的类)
       ResponseEntity<String> response = client.exchange(url, method, requestEntity, String.class);
       //返回类型也可以自动填充到实体类当中去,比如我自己创建了User类,当然字段名称要和返回字段一致
       //ResponseEntity<User> response = client.exchange(url, method, requestEntity, User.class);
       return response.getBody();
   }

2.2 PATCH等其他方式


/**
    * 向目的URL发送patch请求,只比其他方式多了一个允许aptch方式的方法。
    * 由于httpclient不支持patch请求,所以需要反射方式获取连接对象,增加patch方式
    * @param url          目的url
    * @param headerParams 请求头参数
    * @param bodyParams   请求体参数
    * @return AdToutiaoJsonTokenData
    */
   public static String sendPatchRequest(String url, Map<String, String> headerParams,
                                         Map<String, String> bodyParams) {
       //httpclient不支持patch请求,反射方式获取连接对象,增加patch方式
       allowMethods("PATCH");
       RestTemplate client = new RestTemplate();
       //新建Http头,add方法可以添加参数
       HttpHeaders headers = new HttpHeaders();
       //给请求头设置参数
       for (String key : headerParams.keySet()) {
           headers.add(key, headerParams.get(key));
       }
       //headers.add("X-HTTP-Method-Override", "PATCH");
       //设置请求发送方式
       HttpMethod method = HttpMethod.PATCH;
       // 设置提交方式这里设置成application/json格式
       headers.setContentType(MediaType.APPLICATION_JSON);
       //将请求头部和参数合成一个请求
       HttpEntity<Map<String, String>> requestEntity = new HttpEntity<>(bodyParams, headers);
       //执行HTTP请求,将返回的结构使用String 类格式化(可设置为对应返回值格式的类)
       ResponseEntity<String> response = client.exchange(url, method, requestEntity, String.class);
       return response.getBody();
   }
   //增加支持patch请求方式
   private static void allowMethods(String... methods) {
       try {
        //获取连接类的属性,给属性添加aptch就允许aptch请求方式了
           Field methodsField = HttpURLConnection.class.getDeclaredField("methods");
           Field modifiersField = Field.class.getDeclaredField("modifiers");
           modifiersField.setAccessible(true);
           modifiersField.setInt(methodsField, methodsField.getModifiers() & ~Modifier.FINAL);
           methodsField.setAccessible(true);
           String[] oldMethods = (String[]) methodsField.get(null);
           Set<String> methodsSet = new LinkedHashSet<>(Arrays.asList(oldMethods));
           methodsSet.addAll(Arrays.asList(methods));
           String[] newMethods = methodsSet.toArray(new String[0]);
           methodsField.set(null/*static field*/, newMethods);
       } catch (NoSuchFieldException | IllegalAccessException e) {
           throw new IllegalStateException(e);
       }
   }

2.3 解析数据


//工具类调用api接口,获取返回数据
String result = HttpClient.sendPostRequest(createZoomMeetingUrl,header,body);
       JSONObject json = JSONObject.fromObject(result);
       //解析获取数据
       String startUrl = json.getString("start_url");
       String joinUrl = json.getString("join_url");
       //会议室id
       int id = json.getInt("id");
       //解析数据数据
       JSONArray jsonArray = json.getJSONArray("users");
       for(int i=0;i<jsonArray .size();i++){
         String firstName = jsonArray.getJSONObject(i).getString("first_name");
         ...............
       }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:https://www.cnblogs.com/peachh/p/13658125.html

标签:Java,http接口,返回数据
0
投稿

猜你喜欢

  • RocketMQ NameServer架构设计启动流程

    2023-12-13 07:40:01
  • 新手入门Jvm--jvm概览

    2023-11-09 15:42:31
  • emoji表情与unicode编码互转的实现(JS,JAVA,C#)

    2023-02-07 06:07:48
  • 使用JavaBean根据指定条件设置属性值默认值方式

    2023-03-23 04:03:25
  • feign客户端设置超时时间操作

    2023-07-01 19:16:32
  • myeclipse安装Spring Tool Suite(STS)插件的方法步骤

    2023-02-22 00:56:02
  • Java设计模式之监听器模式实例详解

    2022-10-04 02:51:44
  • 举例讲解Java设计模式编程中Decorator装饰者模式的运用

    2023-01-13 03:17:00
  • Spring Boot Gradle发布war到tomcat的方法示例

    2021-09-24 11:36:57
  • Spring实战之ResourceLoader接口资源加载用法示例

    2023-11-20 12:16:49
  • 通过Feign进行调用@FeignClient 找不到的解决方案

    2023-08-18 19:06:52
  • Springboot+Mybatis-plus不使用SQL语句进行多表添加操作及问题小结

    2021-09-30 10:31:10
  • Android手势识别功能

    2022-07-23 22:04:26
  • 使用springboot整合RateLimiter限流过程

    2022-09-12 21:42:48
  • C#中属性和成员变量的区别说明

    2022-02-17 22:36:57
  • C# 多线程更新界面的错误的解决方法

    2022-01-20 15:52:21
  • 轻松掌握Java建造者模式

    2023-11-06 15:24:38
  • Android自定义View仿IOS圆盘时间选择器

    2023-10-12 20:40:32
  • C#值类型、引用类型中的Equals和==的区别浅析

    2022-09-05 23:04:24
  • 对Java的面对对象编程中对象和引用以及内部类的理解

    2022-02-22 12:11:15
  • asp之家 软件编程 m.aspxhome.com