Java请求第三方接口的一些步骤

一、前言

Java请求第三方接口的一些步骤。

在Java中请求第三方接口通常涉及以下步骤。这些步骤涵盖了从准备请求到处理响应的整个过程。

1. 确定接口详情

  • 接口URL:你要请求的URL。
  • 请求方法:如GET、POST、PUT、DELETE等。
  • 请求参数:包括URL参数、请求体参数、请求头参数等。
  • 响应格式:如JSON、XML等。

2. 添加依赖

如果你使用的是Maven或Gradle等构建工具,你可能需要添加HTTP客户端库的依赖。例如,你可以使用Apache HttpClient、OkHttp、Retrofit等。

3. 创建请求

  • 创建一个HttpURLConnection对象(或其他HTTP客户端库的实例)。
  • 设置请求方法(如HttpURLConnection.setRequestMethod("POST"))。
  • 如果需要,设置请求头(如Content-Type、Authorization等)。
  • 如果请求有请求体(如POST请求),设置请求体的内容。

4. 发送请求并获取响应

  • 调用HTTP客户端的发送请求方法(如HttpURLConnection.connect())。
  • 读取响应状态码和响应头。
  • 读取响应体内容(如JSON字符串)。

5. 处理响应

  • 根据响应状态码判断请求是否成功。
  • 解析响应体内容(如将JSON字符串解析为Java对象)。
  • 处理异常或错误情况。

二、获取接口文档(示例)

POST请求报文体是如下请求参数组成的JSON报文
响应报文体是如下响应参数组成JSON报文

请求参数格式
名称类型必填描述
sign_methodString(32)签名摘要算法。目前只支持:MD5。
auth_codeString(32)授权码。商家授权应用访问的凭证。
示例值: VlERCP4fZzHzqK7vnr8weOYqepkXriKL
timestampString(19)时间戳,格式为yyyy-MM-dd HH:mm:ss,时区为GMT+8。 越洋电铺API服务端允许该时间戳与当前时间最大误差为10分钟。
示例值:2017-01-01 12:00:00
signString(32)API输入参数签名结果,签名算法介绍签名算法。
示例值: A950EEDA1342BBDB83AB8C79B759BE44
nonce_strString(32)随机字符串,长度要求在32位以内。建议每笔请求传入一个随机字符串
示例值: 3g3jJVfI9CWwKMr45x9SkB0gbi9kAn28
biz_contentString请求的业务参数组成的JSON字符串,请至请求详情页查看每个请求的具体业务参数定义。
示例值: {"sku_stocks":[{"outer_sku_id":"393992","stock_num":10},{"outer_sku_id":"393993","stock_num":12}]}
响应参数格式
名称类型必填描述示例值
codeString(16)响应码。请至各请求详情页查看请求有无公共返回码之外的业务返回码0000
messageString(128)响应码描述
contentjson object返回业务数据,具体内容由各个api确定
  • 公共返回码
返回码描述
0000成功
0001非法参数
0002非法授权码
0003非法请求时间
0004验签失败
0005非法api名称
0006业务请求参数JSON格式不正确
0007短时间请求过多
0009处理失败,请稍后重试
签名算法
签名生成的通用步骤如下
  • 第一步,设所有发送的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL查询参数键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则

  1. 参数名ASCII码从小到大排序(字典序);
  2. 如果参数的值为空不参与签名;
  3. 参数名区分大小写 ;
  4. 请求url中的app_id和method参数也参与签名
  5. 请求报文体内的sign参数不参与签名
例如将foo=1,bar=2,baz=3 排序为bar=2,baz=3,foo=1, 参数名和参数值链接后,得到拼装字符串bar=2&baz=3&=foo1
  • 第二步,在stringA最后拼接上&app_secret=${appSecret}得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

三、签名,参数

/*** * 组装请求签名信息* * @return*/private HashMap<String, String> getResModelSign(String biz_content) {String signMethod = "MD5";// 时间戳SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String timestamp = sdf.format(new sunbox.core.util.Date());// 随机数String nonceStr = Utility.randomString(6, 1);HashMap<String, String> bodyMap = new HashMap<>();bodyMap.put("app_id", appId);bodyMap.put("app_secret", appSecret);bodyMap.put("method", method);bodyMap.put("sign_method", signMethod);bodyMap.put("timestamp", timestamp);bodyMap.put("nonce_str", nonceStr);bodyMap.put("auth_code", authCode);bodyMap.put("biz_content", biz_content);String signStr = "app_id=" + appId + "&" + "auth_code=" + authCode + "&" + "biz_content=" + biz_content + "&"+ "method=" + method + "&" + "nonce_str=" + nonceStr + "&" + "sign_method=" + signMethod + "&"+ "timestamp=" + timestamp + "&" + "app_secret=" + appSecret;String sign = CtgSignUtil.MD5(signStr).toUpperCase();bodyMap.put("sign", sign);return bodyMap;}

四、开发调试

public static String doPost(String url, String content, String contentType, int connTimeOut, int readTimeOut, Map<String, String> reqHead) throws Exception {CloseableHttpClient httpClient = null;CloseableHttpResponse httpResponse = null;String result = "";// 创建httpClient实例httpClient = HttpClients.createDefault();// 创建httpPost远程连接实例HttpPost httpPost = new HttpPost(url);// 配置请求参数实例RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(connTimeOut)// 设置连接主机服务超时时间.setConnectionRequestTimeout(connTimeOut)// 设置连接请求超时时间.setSocketTimeout(readTimeOut)// 设置读取数据连接超时时间.setProxy(httpClientProxy).build();// 为httpPost实例设置配置httpPost.setConfig(requestConfig);// 设置请求头httpPost.addHeader("Content-Type", contentType);
//        httpPost.addHeader("Content-Length", String.valueOf(content.length()));if (reqHead != null) {for (Map.Entry<String, String> entry : reqHead.entrySet()) {if (StringUtils.isNotBlank(entry.getValue())) {httpPost.addHeader(entry.getKey(), entry.getValue());}}}// 封装post请求参数if (null != content) {// 为httpPost设置封装好的请求参数byte[] b = content.getBytes(StandardCharsets.UTF_8);InputStream is = new ByteArrayInputStream(b, 0, b.length);httpPost.setEntity(new InputStreamEntity(is, b.length, ContentType.create(contentType, StandardCharsets.UTF_8)));}try {// httpClient对象执行post请求,并返回响应参数对象httpResponse = httpClient.execute(httpPost);// 从响应对象中获取响应内容HttpEntity entity = httpResponse.getEntity();result = EntityUtils.toString(entity, "UTF-8");if (httpResponse.getStatusLine().getStatusCode() != 200) {throw new Exception(result);}} catch (ClientProtocolException e) {throw e;} catch (IOException e) {throw e;} finally {// 关闭资源if (null != httpResponse) {try {httpResponse.close();} catch (IOException e) {throw e;}}if (null != httpClient) {try {httpClient.close();} catch (IOException e) {throw e;}}}return result;}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/9140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微型显示器可以实时监测大脑活动

美国团队开发基于LED的设备&#xff0c;以可视化大脑活动&#xff0c;在脑外科手术中指导神经外科医生 来自加州大学圣地亚哥分校和马萨诸塞州总医院的工程师和医生开发了一种薄膜显示设备&#xff0c;该设备结合了电极网格和特殊的GaN LED&#xff0c;可以在手术过程中实时跟…

多线程学习Day07

共享模型之不可变 从一个日期转换的问题开始 Slf4j(topic "c.Test1") public class Test1 {public static void main(String[] args) {SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd");for (int i 0; i < 10; i) {new Thread(() -> {…

buuctf-misc题目练习二

ningen 打开题目后是一张图片&#xff0c;放进winhex里面 发现PK&#xff0c;PK是压缩包ZIP 文件的文件头&#xff0c;下一步是想办法进行分离 Foremost可以依据文件内的文件头和文件尾对一个文件进行分离&#xff0c;或者识别当前的文件是什么文件。比如拓展名被删除、被附加…

元素设置 flex:1,但是会被内部长单词宽度超出拉伸

初始布局如上图&#xff0c;left中是代码编辑器&#xff0c;实际上是个文本域&#xff0c;当输入长文本过长时&#xff0c;left宽度会被拉伸。 右侧容器被挤压。 解决方案&#xff1a;width&#xff1a;0&#xff1b; .left{flex:1; width:0} 当输入长文本过长时&#xff0c…

保姆级零基础微调大模型(LLaMa-Factory,多卡版)

此处非常感谢https://github.com/hiyouga/LLaMA-Factory这个项目。 看到网上的教程很多都是教如何用webui来微调的,这里出一期命令行多卡微调教程~ 1. 模型准备 模型下载比较方便的方法: 1. modelscope社区(首选,速度很高,并且很多需要申请的模型都有)注意要选择代码…

HTML4(二)

文章目录 1 开发者文档2 基本标签2.1 排版标签2.2 语义化标签2.3 行内元素与块级元素2.4 文本标签2.5 常用标签补充 3 图片标签4 超链接标签4.1 跳转页面4.2 跳转文件4.3 跳转锚点4.4 唤起指定应用 5 列表5.1 有序列表5.2 无序列表5.3 自定义列表 6 表格6.1 基本结构6.2 表格标…

【Android】Kotlin学习之数据容器(数组创建)

kotlin数组 数组是一种初始化时指定容器大小, 不可以动态调整其大小的容器 数组创建

WPF之改变任务栏图标及预览

1&#xff0c;略缩图添加略缩按钮。 <Window.TaskbarItemInfo><TaskbarItemInfo x:Name"taskInfo" ProgressState"None" ProgressValue"0.6" ><TaskbarItemInfo.ThumbButtonInfos><ThumbButtonInfo x:Name"btiPlay&q…

雷伴品鉴【神农式】倪琴 倪诗韵古琴

雷伴品鉴【神农式】倪琴 倪诗韵古琴 此琴材质为老杉木音色细腻&#xff0c;下指按弹舒适&#xff0c;手感极好漆面精美&#xff0c;线条流畅。

OpenCV4.8 VS2019 MFC编程出现的诡异现象

OpenCV4.8及OpenCV4.4 VS2019MFC编程在调用imred&#xff08;&#xff09;函数时&#xff0c;debug X64试运行没问题。 release X64试运行时出现下面错误。 void CEasyPictureDlg::OnBnClickedOpen() {CFileDialog fdlg(TRUE, NULL, 0, OFN_HIDEREADONLY | OFN_OVERWRITEPROMP…

私人健身教练预约管理小程序开发源码现成案例(小程序+APP+H5 源码部署)

一、私人健身教练预约管理系统-环境介绍 1.1 私人健身教练预约管理系统-运行环境 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 系统架构&#xff1a;TP 后端&#xff1a;SpringBoot 前端&#xff1a;Vue 2. 私人健身教练预约管理系统-系统介绍。 2.1私人健身教练预约管…

EasyExcel导出带自定义下拉框数据的Excel模板

文章目录 前言&#x1f4dd;一、导入依赖二、创建导出工具1.创建模板实体类2.创建自定义注解3.添加动态选择接口4.EasyExcelUtil工具类 三、导出、导入Excel接口1.导出接口2.导入接口3.导出结果 总结 前言&#x1f4dd; 在项目中导入excel时需要通过下拉框选择值传入&#xff…

【websocket-客户端可视化工具】

postman 新版postman (版本v11以上) &#xff0c;除了http协议&#xff0c;还支持了Websocket&#xff0c;MQTT&#xff0c;gRPC等多种连接协议&#xff0c;可以作为多种协议的客户端&#xff0c;使用起来非常方便。 使用 服务端代码 这里以websocket协议举例&#xff0c;代…

基于51单片机的八路抢答器—加随机抽选功能

基于51单片机的八路抢答器 &#xff08;仿真&#xff0b;程序原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.主持人按键控制开始抢答&#xff1b; 2.开始抢答按下&#xff0c;数码管20秒倒计时&#xff1b; 3.8个按键代表八位选手&#xff0c;谁…

视频降噪算法 hqdn3d 原理分析

视频降噪 视频降噪是一种处理技术&#xff0c;旨在减少视频中的噪声&#xff0c;提高画面质量。噪声可能来自多种源头&#xff0c;包括摄像机的传感器、压缩算法、传输过程中的干扰等。降噪处理对于视频监控、视频会议、电影后期制作以及任何需要高画质输出的应用场景都非常重…

今天又发现一个有意思的问题:SQL Server安装过程中下载报错,证明GPT是可以解决问题的

我们在安装数据库的时候&#xff0c;都会有报错问题&#xff0c;无论是Oracle、SQL Server、还是MySQL&#xff0c;都会遇到各种各样的报错&#xff0c;这归根到底还是因为电脑环境的不同&#xff0c;和用户安装的时候&#xff0c;操作习惯的不一样导致的问题。今天的问题是&am…

SwiftUI 5.0(iOS 17.0,macOS 14.0+)新 Inspector 辅助视图之趣味漫谈

概览 在 SwiftUI 开发中,苹果为我们提供了多种辅助视图用来显示额外信息从而极大丰富了应用的表现力,比如:Alert、Sheet、ContextMenu 等等。 从 SwiftUI 5.0(iOS 17+)开始, 又增加了一种全新的辅助视图:Inspector。 在本篇博文中,您将学到如下内容: 概览1. Inspe…

哈迪斯2发售时间 哈迪斯游戏攻略 苹果电脑怎么玩《哈迪斯2》

这两年肉鸽游戏大爆发&#xff0c;只要不是美女抽卡养成那基本上就是肉鸽了&#xff0c;但是真正让玩家口服心服的肉鸽游戏不多&#xff0c;《哈迪斯》绝对算是其中一款。 近日让玩家期待已久的肉鸽大作&#xff0c;晶体管工作室制作的《哈迪斯》正统续作《哈迪斯2》终于开卖了…

网络编程基础回顾

计算机网络&#xff08;5&#xff09;&#xff1a;运输层 OSI 模型与 TCP/IP 协议 OSI七层协议模型 (open system interconnection) 应用层&#xff1a;为应用数据提供服务表示层&#xff1a;数据格式转化&#xff0c;数据加密会话层&#xff1a;建立、维护和管理会话传输层&…

2-6 任务 猜数小游戏(单次版)

本任务要求编写一个猜数小游戏&#xff08;单次版&#xff09;&#xff0c;游戏规则是计算机产生一个0到100之间的随机整数&#xff0c;用户通过输入猜测的数字进行猜测&#xff0c;根据猜测情况给出提示&#xff0c;直到猜对为止。编程思路是利用while循环和多分支结构实现永真…