如何调用第三方接口

如何调用第三方接口

相信大家一定遇到过,在开发的时候调用第三方接口,无非也就是那几种请求方式:GET,POST,PUT,DELELE;

但是我想,一遇到东西,大家都无从下手(哭脸呜呜呜~~~~)

别担心,掌握这种方法就行啦~~~

首先,引入工具类

package ccm.server.utils;

import ccm.server.RequestType;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * jdk 调用第三方接口
 *
 * @author hsq
 */
public class HttpClientUtil2 {
    /**
     * get请求,调用该类的Get请求方法底层;delete
     *
     * @param jsonObject 这里用的参数为json形式
     * @param tpapiPath url地址
     * @param token token
     * @param requestType 请求类型
     * @return 返回第三方接口的结果
     */
    public static String httpGetOrDeleteJson(JSONObject jsonObject, String tpapiPath, String token, String requestType) throws UnsupportedEncodingException {
        List<String> keys = new ArrayList<>();//参数名列表
        List<Object> values = new ArrayList<>();//参数值列表
        //因为get请求需要把参数名及参数值拼到url地址中

        //取值,将参数名和参数值放入list中
        for (Map.Entry<String, Object> entry : jsonObject.entrySet()) {
            String key = entry.getKey();//参数名
            Object value = entry.getValue();//参数值
            keys.add(key);
            values.add(value);
        }
        for (int i = 0; i < keys.size(); i++) {
            if (i == 0) {
                String encode = URLEncoder.encode((String) values.get(i), "UTF-8");//转码
                tpapiPath = tpapiPath + "?" + keys.get(i) + "=" +
                        encode;

            } else {
                String encode = URLEncoder.encode((String) values.get(i), "UTF-8");//转码
                tpapiPath = tpapiPath + "&" + keys.get(i) + "=" + encode;
            }
        }

        //拼接结束,将token拼进url
        tpapiPath = tpapiPath + "&token=" + token;
        String result = null;

        if (requestType.equals(RequestType.GET.getType())) {
            result = doGet(tpapiPath);
        } else {
            result = doDelete(tpapiPath);
        }

        return result;
    }

    /**
     * post请求 put
     *
     * @param jsonObject
     * @param tpapiPath
     * @param token
     * @return
     */
    public static String httpPostOrPutJson(JSONObject jsonObject, String tpapiPath, String token, String requestType) {
        HttpEntityEnclosingRequestBase httppost = null;//该对象为post和put的父类
        
        String string = JSON.toJSONString(jsonObject);
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        String data = "";
        try {
            httpClient = HttpClients.createDefault();
            if (requestType.equals(RequestType.POST.getType())) {
                httppost = new HttpPost(tpapiPath + "?token=" + token);
            } else {
                httppost = new HttpPut(tpapiPath + "?token=" + token);

            }
            httppost.setHeader("Content-Type", "application/json;charset=UTF-8");
            StringEntity se = new StringEntity(string, StandardCharsets.UTF_8);
            se.setContentType("text/json");
            se.setContentEncoding("UTF-8");
            httppost.setEntity(se);
            response = httpClient.execute(httppost);
            int code = response.getStatusLine().getStatusCode();
            System.out.println("接口响应码:" + code);
            data = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
            EntityUtils.consume(response.getEntity());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                }
            }
            if (httpClient != null) {
                try {
                    httpClient.close();
                } catch (IOException e) {
                }
            }
        }
        return data;
    }

    /**
     * 以post方式调用对方接口方法
     *
     * @param pathUrl
     */
    public static String doPost(String pathUrl, String data) {
        OutputStreamWriter out = null;
        BufferedReader br = null;
        String result = "";
        try {
            URL url = new URL(pathUrl);

            //打开和url之间的连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            //设定请求的方法为"POST",默认是GET
            //post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
            conn.setRequestMethod("POST");

            //设置30秒连接超时
            conn.setConnectTimeout(30000);
            //设置30秒读取超时
            conn.setReadTimeout(30000);

            // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
            conn.setDoOutput(true);
            // 设置是否从httpUrlConnection读入,默认情况下是true;
            conn.setDoInput(true);

            // Post请求不能使用缓存
            conn.setUseCaches(false);

            //设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");  //维持长链接
            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");

            //连接,从上述url.openConnection()至此的配置必须要在connect之前完成,
            conn.connect();

            /**
             * 下面的三句代码,就是调用第三方http接口
             */
            //获取URLConnection对象对应的输出流
            //此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,所以在开发中不调用上述的connect()也可以)。
            out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
            //发送请求参数即数据
            out.write(data);
            //flush输出流的缓冲
            out.flush();

            /**
             * 下面的代码相当于,获取调用第三方http接口后返回的结果
             */
            //获取URLConnection对象对应的输入流
            InputStream is = conn.getInputStream();
            //构造一个字符流缓存
            br = new BufferedReader(new InputStreamReader(is));
            String str = "";
            while ((str = br.readLine()) != null) {
                result += str;
            }
            System.out.println(result);
            //关闭流
            is.close();
            //断开连接,disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断。
            conn.disconnect();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    /**
     * 以get方式调用对方接口方法
     *
     * @param pathUrl
     */
    public static String doGet(String pathUrl) {
        BufferedReader br = null;
        String result = "";
        try {
            URL url = new URL(pathUrl);

            //打开和url之间的连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            //设定请求的方法为"GET",默认是GET
            //post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
            conn.setRequestMethod("GET");

            //设置30秒连接超时
            conn.setConnectTimeout(30000);
            //设置30秒读取超时
            conn.setReadTimeout(30000);

            // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
            conn.setDoOutput(true);
            // 设置是否从httpUrlConnection读入,默认情况下是true;
            conn.setDoInput(true);

            // Post请求不能使用缓存(get可以不使用)
            conn.setUseCaches(false);

            //设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");  //维持长链接
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

            //连接,从上述url.openConnection()至此的配置必须要在connect之前完成,
            conn.connect();

            /**
             * 下面的代码相当于,获取调用第三方http接口后返回的结果
             */
            //获取URLConnection对象对应的输入流
            InputStream is = conn.getInputStream();
            //构造一个字符流缓存
            br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            String str = "";
            while ((str = br.readLine()) != null) {
                result += str;
            }
            System.out.println(result);
            //关闭流
            is.close();
            //断开连接,disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断。
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

    public static String doDelete(String pathUrl) {
        BufferedReader br = null;
        String result = "";
        try {
            URL url = new URL(pathUrl);

            //打开和url之间的连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            //设定请求的方法为"GET",默认是GET
            //post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
            conn.setRequestMethod("DELETE");

            //设置30秒连接超时
            conn.setConnectTimeout(30000);
            //设置30秒读取超时
            conn.setReadTimeout(30000);

            // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在http正文内,因此需要设为true, 默认情况下是false;
            conn.setDoOutput(true);
            // 设置是否从httpUrlConnection读入,默认情况下是true;
            conn.setDoInput(true);

            // Post请求不能使用缓存(get可以不使用)
            conn.setUseCaches(false);

            //设置通用的请求属性
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");  //维持长链接
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

            //连接,从上述url.openConnection()至此的配置必须要在connect之前完成,
            conn.connect();

            /**
             * 下面的代码相当于,获取调用第三方http接口后返回的结果
             */
            //获取URLConnection对象对应的输入流
            InputStream is = conn.getInputStream();
            //构造一个字符流缓存
            br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            String str = "";
            while ((str = br.readLine()) != null) {
                result += str;
            }
            System.out.println(result);
            //关闭流
            is.close();
            //断开连接,disconnect是在底层tcp socket链接空闲时才切断,如果正在被其他线程使用就不切断。
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null) {
                    br.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }
}


需要注意的是:无论什么请求,都必须将参数转为utf-格式,否则程序读取失败;

还有,post和put请求是将其参数放入请求中来完成的;而get和delete请求是将参数拼进地址来完成的;

下面模拟调用第三方接口

	@ApiOperation(value = "test", notes = "test")
    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public String test(@RequestBody Map<String, Object> param) throws Exception {
        MapUtils instance = MapUtils.getInstance(map);
        String params = instance.getString("params");
        String tpapiPath = instance.getString("tpapiPath");
        .......
        String thirdData = HttpClientUtil2.httpGetOrDeleteJson(params, tpapiPath, token, tpapiType);
        return thirdData;
    }

	//下面为模拟第三方接口
	@ApiOperation(value = "test", notes = "test")
    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public String test(@RequestBody Map<String, Object> param) throws Exception {
        return param.toString() + "1";
    }

    @ApiOperation(value = "test2", notes = "test2")
    @RequestMapping(value = "/test2", method = RequestMethod.GET)
    public String test2(@RequestParam("params") String params, @RequestParam("params2") String params2) throws Exception {
        return params.toString() + "2" + params2;
    }

    @ApiOperation(value = "test3", notes = "test3")
    @RequestMapping(value = "/test3", method = RequestMethod.PUT)
    public String test3(@RequestBody Map<String, Object> params) throws Exception {
        return params.toString() + "3";
    }

    @ApiOperation(value = "test4", notes = "test4")
    @RequestMapping(value = "/test4", method = RequestMethod.DELETE)
    public String test4(@RequestParam("params") String params, @RequestParam("params2") String params2) throws Exception {
        return params.toString() + "4" + params2;
//        return params.toString()+"4";
    }

准备工作完成,开始测试~~~

在这里插入图片描述

返回结果:

在这里插入图片描述

调用第三方接口,完成~~~

阳光正好~微风不燥
关注 关注
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java调用第三方接口示范的实现
08-25
主要介绍了Java调用第三方接口示范的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
如何在后端去访问第三方API
05-25 2801
如何在后端去访问第三方给的API     在后端开发中,我们除了编写供前端调用接口外,有时我们在后端也会去调用第三方接口实现业务处理,那我们如何去调用第三方接口呢?     我们都知道http包含头部和body,因此我们需要去模仿构造一个header和body,那在开发中有什么快捷的方式实现嘛? 首先构造http头部 HttpHeaders httpHeaders = new HttpHeaders();     其中HttpHeaders()属于Spring框架—import org.spring
第三方接口调用
最新发布
weixin_45898111的博客
08-29 351
下面代码用到的LinkedMultiValueMap是用来传form表单格式的参数的,例如:user=你&age=11。我今天对第三种方式通过Spring的RestTemplate 这个方法再进行详细的说明下,补充一些细节。下面代码用到的FileSystemResource是用来传form表单格式中含file文件参数的.如果是POST请求方式,参数是用form-data格式,但是参数含file文件,那么用下面的代码。如果是POST请求方式,参数是用form-data格式,不含file文件那么用下面的代码。
java第三方接口
weixin_70280523的博客
12-05 9537
第三方接口
Java调用第三方接口的方法
y516369的博客
11-28 5725
Java调用第三方接口的方法
Java实现调用第三方相关接口(附详细思路)
程序羊的博客
03-15 7140
目录1.0.简单版2.0.升级版2-1.call.timeout()怎么传入新的超时值2-2.timeout(10, TimeUnit.SECONDS)两个参数的意思,具体含义3.0.进阶版3-1.java.net.SocketTimeoutException: 超时如何解决4.0.终极版 1.0.简单版   以下是一个使用 Java 实际请求“第三方”的简单示例代码。这个示例使用了 Java 的 OkHttp 库来发送 HTTP 请求和接收。 import okhttp3.*; import java
JAVA后端调用第三方URL接口
qq_36288754的博客
08-30 2743
项目里有时候需要在后端引用别人的url,这里用的是的HttpClient,简单封装了一下HttpClient的get和post的方法。
SpringBoot使用Feign调用第三方接口Demo.zip
11-17
在这个"SpringBoot使用Feign调用第三方接口Demo"中,我们将深入探讨如何在SpringBoot项目中集成和使用Feign。首先,我们需要引入Feign的相关依赖。在SpringBoot项目中,我们通常会使用Spring Cloud的Feign实现,因此...
HttpClientUtil工具类,调用第三方接口
10-25
该工具类是java 调用第三方接口时需要使用到的。HttpClientUtil 包含get和post方法。
实现get/post请求调用第三方接口工具类
07-29
使用http协议中的get以及post方式对接第三方平台在工作中很常见,我所展示的已是将方法归纳好,只需要按照对接方案传递对应的参数即可。
SpringBoot(32) 整合Forest实现调用第三方接口
08-17
SpringBoot(32) 整合Forest实现调用第三方接口
Java后台调用第三方接口
weixin_42087031的博客
01-06 4883
前言 大家好,我是南城、有潇湘,一个有点文学气息的Java小白,如果我得文章对您有所帮助,不胜荣幸!!! 项目场景: 当我们进行微信小程序开发的时候,有时候避免不了需要去和其他项目进行对接,去调用其他项目接口,但是由于微信小程序规则的限制,前端没办法访问外部链接,这个时候就需要后端对接口进行处理之后将数据交给前端. 问题描述: ①后端如何调用外部接口? ②如何在第三方接口有权限认证的情况下动态处理? # 问题分析: ①首先我们确定一下我们需要什么以及我们有什么和没有什么,我们需要的是接口返回的数据,
JAVA后端——调用第三方URL接口
wch0001的博客
05-13 8000
文章目录前言内容添加依赖get请求post请求http协议问题总结 前言 在项目里有时候需要在后端引用别人的url,java用来调用的方法也有好几种,比如HttpURLConnection,还有apache的HttpClient,简单封装了一下HttpClient的get和post的方法。一般情况下应该是够用了 内容 添加依赖 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifac
Java调用第三方http接口的方式总结(四种)
qq_43842093的博客
03-01 1万+
在实际开发过程中,我们经常需要或测试自己写的接口是否合适。很多项目都会封装规定好本身项目接口规范,所以大多数需要去调用对方提供的接口第三方接口(短信、天气等)①通过JDK网络类Java.net.HttpURLConnection;②通过common封装好的HttpClient;③通过Apache封装好的CloseableHttpClient;④通过SpringBoot-RestTemplate;
Java 调用第三方接口方法
热门推荐
qq_41128049的博客
04-25 3万+
Java 调用第三方接口方法 一、 通过JDK网络类Java.net.HttpURLConnection 1.java.net包下的原生java api提供的http请求 使用步骤: 1、通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)。 2、设置请求的参数。 3、发送请求。 4、以输入流的形式获取返回内容。 5、关闭输入流。 2.HttpClientUtil工具类 /** * jdk 调用第三方接口 * @author hsq */ pub
java对接第三方接口的三种方式
weixin_36873225的博客
03-08 3182
HTTP正文的内容是通过OutputStream流写入,向流中写入的数据不会立即发送到网络,而是存在于内存缓冲区中,待流关闭时,根据写入的内容生成HTTP正文。当然还有其他工具类进行封装的接口,比如hutool的HttpUtil工具类,里面除了post、get请求外,还有下载文件的方法downloadFile等。调用getInputStream()方法时,会返回一个输入流,用于从中读取服务器对于HTTP请求的返回报文。1.原生的Java.net.HttpURLConnection(jdk);
Java调用第三方接口的详细指南
weixin_65837469的博客
07-17 3013
Java开发中,经常需要调用第三方接口来获取数据或执行某些服务。本文将详细介绍如何使用Java调用第三方接口,包括使用JDK自带的类和流行的第三方库如OkHttp和Apache HttpClient。
调用第三方接口的方式(简洁版)
xtldcn的博客
03-07 1402
简单使用接口调用
dubbo调用第三方接口
05-18
Dubbo是一个分布式服务框架,它可以让应用之间通过RPC调用来实现服务的调用。如果需要调用第三方接口,可以通过Dubbo的扩展机制来实现。具体步骤如下: 1. 定义接口:首先需要定义一个接口,来描述第三方接口调用方法。 2. 实现接口:然后需要编写一个实现类,实现上述接口。在该实现类中,可以通过第三方SDK来实现第三方接口调用,并将结果返回给调用方。 3. 配置Dubbo:在Dubbo的配置文件中,需要将实现类注册为一个Dubbo服务,并且指定该服务的协议、端口等信息。 4. 调用服务:在应用中,可以通过Dubbo的Reference注解来引用该服务,并通过该服务来调用第三方接口
写文章

热门文章

  • 如何调用第三方接口 834
  • 单元测试——常规测试的核心改造 252
  • 玩儿转json 153

最新评论

  • 如何调用第三方接口

    小宝贝儿01: RequestType报红啊

最新文章

  • 玩儿转json
  • 单元测试——常规测试的核心改造
2022年3篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家中山玻璃钢卡通雕塑费用是多少南阳专业不锈钢玻璃钢雕塑公司铁山玻璃钢雕塑厂家海豚玻璃钢雕塑浙江商场节庆美陈雕塑报价云南玻璃钢花盆厂家义乌玻璃钢雕塑订制辽宁火烈鸟玻璃钢雕塑价格许昌玻璃钢人物雕塑佛山玻璃钢雕塑模型陕西户外玻璃钢雕塑订做价格河北特色商场美陈多少钱深圳中庭商场美陈多少钱江苏玻璃钢广场雕塑定制北京主题商场美陈泰州商场主题美陈文昌玻璃钢雕塑厂家咨询客服宝鸡校园玻璃钢雕塑阳曲玻璃钢花盆花器河北玻璃钢雕塑摆件制造庆阳抽象人物玻璃钢雕塑定做洛龙玻璃钢雕塑加工厂家酒瓶玻璃钢雕塑现货玻璃钢农耕人物雕塑革命主题玻璃钢雕塑量大从优商场美陈的概述有哪些美陈玻璃钢雕塑怎么样浙江大型主题商场美陈批发许昌玻璃钢雕塑图片重庆玻璃钢卡通雕塑圣诞定制香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化