IntelliJ IDEA 自带的 HTTP Client接口调用插件,替代 Postman

文章目录

    • 引言
    • 建议目录结构
    • 新建请求
    • 不同环境的变量配置
      • 添加环境
      • http-client.env.json
      • http-client.private.env.json
      • 引用变量
    • 请求示例
      • Get请求示例
      • Post请求示例
      • 鉴权示例
      • 断言示例
      • Websocket请求示例
    • 内置对象和动态变量
      • 内置对象:
      • 内置变量:

引言

在日常的 Web 服务开发和调试中,我们经常需要对接口进行调用和测试。无论是在与团队内部协作开发时,还是在与第三方系统进行接口联调时,接口调用是不可或缺的一环。而在这个过程中,许多开发者会首选一款功能强大且易用的工具,其中最常见的就是 Postman —— 这是一款备受欢迎的接口调试工具,拥有丰富的功能和用户友好的界面。

然而,随着开发工具的不断演进,一些集成开发环境(IDE)也提供了强大的工具来简化和优化接口调用的过程。其中,IntelliJ IDEA 作为一款广泛使用的 Java 开发工具,自带了一个强大的 HTTP Client 接口调用插件,为开发者提供了一种替代 Postman 的选择。

建议目录结构

srcmaintest    http├── AXXX.http                     # 调用A接口的文件├── BXXX.http                     # 调用B接口的文件├── http-client.env.json          # 通用配置(接口地址等)├── http-client.private.env.json  # 私有配置(密码、Token等)

新建请求

  • 入口一:工具栏(idea顶上的一行工具里面)->Tools->HTTP Client。创建的是临时文件,不跟项目关联。

在这里插入图片描述

  • 入口二:点击接口旁边的这个图标,可以自动生成接口的url请求。创建的是临时文件,不跟项目关联。

  • 入口三:通过 cURL 创建请求,在xxx.http文件上,点击右上角的 Convert form cURL 按钮,然后输入 cURL 地址即可自动转换。

  • 入口四:可以在项目中测试目录(或者其他目录)下建一个http目录,右击New->HTTP Request,输入文件名称(.http结尾)即可创建。建议用这个,跟项目关联

从http请求跳转到接口层的代码

光标放在url上面,然后 Ctrl + 鼠标左键可以打开,可以从http请求跳转到接口层的代码。

请求结果

所有的请求结果,请求历史记录,cookies等信息会存放在 .idea 文件夹下,如下:

不同环境的变量配置

在 Spring Boot 项目中,我们通常使用 Profile 机制来实现在不同环境中应用不同的配置文件。类似地,在 IntelliJ IDEA 中使用 HTTP Client 插件时,我们也可以借助类似的机制,以便在不同环境下轻松管理和切换配置。

首先,我们可以创建一个名为 http-client.env.json 的配置文件,用于定义通用变量,例如 URL 地址、端口号等。这样一来,我们可以通过在不同环境中使用不同的配置文件,轻松地适应不同的场景需求。

// http-client.env.json
{"url": "https://api.example.com","port": 8080,"commonHeader": "application/json"
}

其次,为了安全起见,我们还可以创建一个名为 http-client.private.env.json 的配置文件,专门用于存储敏感变量,例如用户名/密码、访问令牌等。请注意,由于这些信息属于敏感数据,我们强烈建议不要将 http-client.private.env.json 提交到 Git 仓库中,以免泄露敏感信息。

// http-client.private.env.json
{"username": "your_username","password": "your_password","token": "your_access_token"
}

最后,需要强调的是,确保将 http-client.private.env.json 添加到项目的 .gitignore 文件中,以防止不小心将敏感信息提交到版本控制系统中。

添加环境

可以设置不同环境的变量,比如dev、test、prod等。

在这里插入图片描述

http-client.env.json

{"dev": {"host": "localhost","port": 8080,"domain": "localhost:8080","cookie" : "cookieDev"},"test": {"host": "baidu.test.com","port": 8080,"domain": "baidu.test.com","cookie" : "cookieSit"},"prod": {"host": "baidu.com","port": 8080,"domain": "baidu.com","cookie" : "cookieDevProd"}
}

http-client.private.env.json

{"dev": {"username": "","password": ""},"test": {"username": "","password": ""},"prod": {"username": "","password": ""}  
}

引用变量

要引用这些定义变量,只需要使用{{}} 这个符号即可。比如引用domain ,可以用 {{domain}}。

引用的环境变量如下:

POST http://{{domain}}/dangerWork/query
Content-Type: application/json
Cookie:{{cookie}}{"xxx": "xxx"
}

运行时,自行选择运行环境。

请求示例

Get请求示例

### 带有头部的 GET 请求
GET https://httpbin.org/ip
Accept: application/json### 带有参数的 GET 请求
GET https://httpbin.org/get?show_env=1
Accept: application/json### 使用环境变量的 GET 请求
GET {{host}}/get?show_env={{show_env}}
Accept: application/json### 禁用重定向的 GET 请求
# @no-redirect
GET http://httpbin.org/status/301### 带有动态变量的 GET 请求
GET http://httpbin.org/anything?id={{$uuid}}&ts={{$timestamp}}### 禁止将请求保存到请求历史记录
// @no-log
GET example.com/api### 禁止将收到的 cookie 保存到 cookie jar
// @no-cookie-jar
GET example.com/api### 

Post请求示例

### 第一行:POST请求,请求地址
### 第二 三行:请求头信息,多个请求头信息依次写下去(第三行、第四行……)
### 第N行:写具体的请求体,这里是JSON串,请求头和请求体之间要空出一行
### 多个请求间用 ### 分割
### 可以用 ptr 快捷提示 form表单是 ptrp### 发送带有 JSON 主体的 POST 请求
POST https://httpbin.org/post
Content-Type: application/json{"id": 999,"value": "content"
}### 发送将主体作为参数的 POST 请求
POST https://httpbin.org/post
Content-Type: application/x-www-form-urlencodedid=999&value=content### 发送包含文本和文件字段的表单
POST https://httpbin.org/post
Content-Type: multipart/form-data; boundary=WebAppBoundary--WebAppBoundary
Content-Disposition: form-data; name="element-name"
Content-Type: text/plainName
--WebAppBoundary
Content-Disposition: form-data; name="data"; filename="data.json"
Content-Type: application/json< ./request-form-data.json
--WebAppBoundary--### 发送带有请求主体中动态变量的请求
POST https://httpbin.org/post
Content-Type: application/json{"id": {{$uuid}},"price": {{$randomInt}},"ts": {{$timestamp}},"value": "content"
}###

鉴权示例

### 基本授权。
GET https://httpbin.org/basic-auth/user/passwd
Authorization: Basic user passwd### 带有变量的基本授权。
GET https://httpbin.org/basic-auth/user/passwd
Authorization: Basic {{username}} {{password}}### 摘要授权。
GET https://httpbin.org/digest-auth/realm/user/passwd
Authorization: Digest user passwd### 带有变量的摘要授权。
GET https://httpbin.org/digest-auth/realm/user/passwd
Authorization: Digest {{username}} {{password}}### 令牌授权,第 1 部分。检索并保存令牌。
POST https://httpbin.org/post
Content-Type: application/json{"token": "my-secret-token"
}> {% client.global.set("auth_token", response.body.json.token); %}### 令牌授权,第 2 部分。使用令牌进行授权。
GET https://httpbin.org/headers
Authorization: Bearer {{auth_token}}###

断言示例

### 成功的测试:检查响应状态是否为 200
GET https://httpbin.org/status/200> {%
client.test("请求成功执行", function() {client.assert(response.status === 200, "响应状态不是 200");
});
%}### 失败的测试:检查响应状态是否为 200
GET https://httpbin.org/status/404> {%
client.test("请求成功执行", function() {client.assert(response.status === 200, "响应状态不是 200");
});
%}### 检查响应状态和内容类型
GET https://httpbin.org/get> {%
client.test("请求成功执行", function() {client.assert(response.status === 200, "响应状态不是 200");
});client.test("响应内容类型为 JSON", function() {var type = response.contentType.mimeType;client.assert(type === "application/json", "期望 'application/json',但收到 '" + type + "'");
});
%}### 检查响应主体
GET https://httpbin.org/get> {%
client.test("存在 Headers 选项", function() {client.assert(response.body.hasOwnProperty("headers"), "在响应中找不到 'headers' 选项");
});
%}###

Websocket请求示例

### 简单的 WebSocket 请求
// 可以直接从 Services 工具窗口向服务器发送消息
WEBSOCKET ws://{{$exampleServer}}/ws### 带有客户端消息的请求
// 可以在请求体中指定客户端消息。使用 '===' 来分隔消息。
// 在消息上方添加 '=== wait-for-server',以在收到服务器响应后发送消息。
// 要等待 N 个响应,请添加 '=== wait-for-server' N 次。
WEBSOCKET ws://{{$exampleServer}}/ws
Content-Type: application/json // 我们使用它进行突出显示===
{"message": "你好,服务器!","repeat": 3
}
=== wait-for-server
=== wait-for-server
{"message": "我们发送这条消息...","repeat": 0
}
===
{"message": "和这条消息一起","repeat": 1
}### 带有脚本的请求
// 此外,我们还可以使用脚本向服务器发送消息并验证服务器的消息。
WEBSOCKET ws://{{$exampleServer}}/ws
Content-Type: application/json{"message": "开始的消息"
}> {%var i = 0response.body.onEachMessage((message, unsubscribe, output) => {i++const jsonMessage = JSON.parse(message); // 我们知道我们的示例服务器返回 JSONclient.test("服务器发送了一个带有 'message' 属性的 JSON:" + i , () => {client.assert(jsonMessage.message !== undefined)});if (jsonMessage.message.includes("finish")) {unsubscribe() // 移除当前的监听器return}if (i === 5) {output(JSON.stringify({message: "finish"}));} else {output(JSON.stringify({message: "脚本发送的消息:" + i}));}}, () => {client.log("我们停止了从当前 'onEachMessage' 调用中的 WebSocket 监听!")});%}

内置对象和动态变量

IntelliJ IDEA 的 HTTP Client 插件内置了一些对象和变量,以便在请求和脚本中执行动态操作。以下是一些常见的内置对象和变量:

内置对象:

每个请求变量

< {%request.variables.set("firstname", "John")
%}
GET http://example.org/{{firstname}}

全局请求变量

GET https://httpbin.org/get> {%client.global.set("my_cookie", response.headers.valuesOf("Set-Cookie")[0]);
%}
  • request 对象
  • client 对象
  • crypto 对象

内置变量:

动态变量在每次运行请求时生成一个值。它们的名称以 $ 开头:

  • $uuid$random.uuid:生成一个通用唯一标识符(UUID-v4)。
  • $timestamp:生成当前的UNIX时间戳。
  • $isoTimestamp:生成UTC时区的当前时间戳,以ISO-8601格式表示。
  • $randomInt:生成介于0和1000之间的随机整数。
  • $random.integer(from, to):生成介于from(包括)和to(不包括)之间的随机整数,例如 random.integer(100, 500)。如果不提供参数,它将生成介于0和1000之间的随机整数。
  • $random.float(from, to):生成介于from(包括)和to(不包括)之间的随机浮点数,例如 random.float(10.5, 20.3)。如果不提供参数,它将生成介于0和1000之间的随机浮点数。
  • $random.alphabetic(length):生成长度为 length(必须大于0)的大写和小写字母序列。
  • $random.alphanumeric(length):生成长度为 length(必须大于0)的大写和小写字母、数字和下划线序列。
  • $random.hexadecimal(length):生成长度为 length(必须大于0)的随机十六进制字符串。
  • $random.email:生成一个随机电子邮件地址。
  • $exampleServer:被替换为IntelliJ IDEA内置的Web服务器,仅可通过HTTP Client访问。此变量用于GraphQL和WebSocket示例中。

例如:

GET http://localhost/api/get?id={{$uuid}}

这些变量和对象允许你在请求执行期间执行条件检查、日志记录和动态操作。

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

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

相关文章

关于引用unpkg.com的mars3d相关依赖文件报错无法请求的说明

问题来源&#xff1a; 1.关于引用unpkg.com的mars3d相关依赖文件报错无法请求的说明 说明&#xff1a; 1.最近npm、unpkeg都访问异常&#xff0c;可能是unpkg.com等国外的服务器不稳定导致的请求未响应。 解决方案&#xff1a; 1.请切换静态文件引入的方式请求相关资源。参…

LaTex:如何在数学环境下打出大的右括号“}“

一般来说多行公式打左大括号都知道使用语法"cases" \begin{cases} foo\\ foo\\ \end{cases}最近需要键入右边大花括号括起来公式的时候犯难了&#xff0c;搜了很多用的都是"\left.array\right}"&#xff0c;看得我昏迷&#xff0c;屡屡报错。 突然想起很久…

selenium自动化(中)

显式等待与隐式等待 简介 在实际工作中等待机制可以保证代码的稳定性&#xff0c;保证代码不会受网速、电脑性能等条件的约束。 等待就是当运行代码时&#xff0c;如果页面的渲染速度跟不上代码的运行速度&#xff0c;就需要人为的去限制代码执行的速度。 在做 Web 自动化时…

PS背景色替换

1.打开ps后右键图层复制 2.隐藏复制的图层&#xff0c;选择魔术橡皮擦擦掉不用替换的颜色 3.选中图层后选择颜色叠加修改图层颜色

机器学习-SVM(支持向量机)

推荐课程&#xff1a;【机器学习实战】第5期 支持向量机 |数据分析|机器学习|算法|菊安酱_哔哩哔哩_bilibili 赞美菊神ヾ ( ゜ⅴ゜)&#xff89; 一、什么是支持向量机&#xff1f; 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一类按监督学习&#xff0…

【神行百里】pandas查询加速之行索引篇

最近进行大数据处理的时候&#xff0c;发现我以前常用的pandas查询方法太慢了&#xff0c;太慢了&#xff0c;真是太慢了&#xff0c;查阅资料&#xff0c;遂发现了一种新的加速方法&#xff0c;能助力我飞上天&#xff0c;和太阳肩并肩&#xff0c;所以记录下来。 1. 场景说明…

跨境独立站优势包括哪些?是否值得做呢?

跨境独立站的优势主要包括&#xff1a; 自主品牌建设&#xff1a;独立站可以更好地展示自主品牌形象&#xff0c;提高品牌知名度和美誉度。 独立域名&#xff1a;独立站可以拥有自己的域名&#xff0c;更加稳定和可信。 自主运营&#xff1a;独立站可以自主运营&#xff0c;包…

低版本echarts的升级到新版5.4.0的echarts浏览器预警和报错信息

新版5.4.0的echarts浏览器预警和报错信息 [ECharts] DEPRECATED: ‘normal’ hierarchy in itemStyle has been removed since 4.0. All style properties are configured in itemStyle directly now. 因为normal层被移除&#xff0c;问题代码如下图所示 itemStyle: {normal:…

MBR30200FCT-ASEMI大电流肖特基MBR30200FCT

编辑&#xff1a;ll MBR30200FCT-ASEMI大电流肖特基MBR30200FCT 型号&#xff1a;MBR30200FCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大平均正向电流&#xff1a;30A 最大重复峰值反向电压&#xff1a;200V 产品引线数量&#xff1a;3 产品内部芯片个数&am…

系统韧性研究(7)| 韧性系统的16大指导原则

不良事件和条件可能会中断系统&#xff0c;导致系统无法提供必要的功能和服务。正如我在本系列的前几篇文章中所概述的那样&#xff0c;韧性是大多数系统的一个基本质量属性&#xff0c;因为它们提供了关键的能力和服务&#xff0c;尽管存在着不可避免的困难&#xff0c;但这些…

文件搜索项目知识介绍

项目背景SQLite介绍SQLite、驱动包下载SQLite使用SQLite和MySQL区别 JDBC搭配SQLiteJDBC原理-创建连接JDBC原理-关闭连接添加和发送SQLJDBC-事务开启和提交 打包.exe文件线程池线程数量问题 项目背景 需求上&#xff1a;因为Windows的文件搜索工具搜索速度十分的慢&#xff1b…

虚幻学习笔记11—C++结构体、枚举与蓝图的通信

一、前言 结构体的定义和枚举类似&#xff0c;枚举的定义有两种方式。区别是结构体必须以“F”开头命名&#xff0c;而枚举不用。 额外再讲了一下蓝图生成时暴露变量的方法。 二、实现 2.1、结构体 1、定义结构体 代码如下&#xff0c;注意这个定义的代码一定要在“UCLASS()”…

从零构建属于自己的GPT系列6:模型本地化部署2(文本生成函数解读、模型本地化部署、文本生成文本网页展示、代码逐行解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;数据预处理 从零构建属于自己的GPT系列2&#xff1a;模型训…

ThinkPHP连接ORACLE数据库教程

目录 概念基本步骤详细操作问题排除参考 概念 要连接Oracle数据库&#xff0c;必须有两个东西&#xff0c;一个PHP官方写的扩展&#xff0c;一个Oracle官方写的客户端PHP是通过扩展去操作oralce客户端连接的服务端数据库&#xff0c;所以两个都不能少&#xff0c;而且版本必须…

大数据讲课笔记1.4 进程管理

文章目录 零、学习目标一、导入新课二、新课讲解&#xff08;一&#xff09;进程概述1、基本概念2、三维度看待进程3、引入多道编程模型&#xff08;1&#xff09;CPU利用率与进程数关系&#xff08;2&#xff09;从三个视角看多进程 4、进程的产生和消亡&#xff08;1&#xf…

5V低压步进电机驱动芯片GC6150,应用于摄像机,机器人 医疗器械等产品中。具有低噪声、低振动的特点

GC6150是双通道5V低压步进电机驱动器&#xff0c;具有低噪声、低振动的特点&#xff0c;特别适用于相机变焦对焦系统、万向架、摇头机等精度、低噪声STM控制系统&#xff0c;该芯片为每个通道集成了一个256微步的驱动器。通过SPI & T2C接口&#xff0c;客户可以方使地调整驱…

Python+Appium自动化测试之元素等待方法与重新封装元素定位方法

在appium自动化测试脚本运行的过程中&#xff0c;因为网络不稳定、测试机或模拟器卡顿等原因&#xff0c;有时候会出现页面元素加载超时元素定位失败的情况&#xff0c;但实际这又不是bug&#xff0c;只是元素加载较慢&#xff0c;这个时候我们就会使用元素等待的方法来避免这种…

下降路径最小和/最小路径和(dp问题)

1.状态表示 2.状态转移方程 3.初始化 4.填表 从上往下 5.返回值 dp表最后一行的最小值 ------------------------------------------------------------------------------------------------------------------------------- 1.状态表示 2.状态转移方程 3.初始化 4.填表 上…

【教程】app备案流程简单三部曲即可完成

APP备案流程包括以下步骤&#xff1a; 1. 开发者实名认证&#xff1a;在提交备案申请之前&#xff0c;开发者需要通过移动应用开发平台进行实名认证。这个步骤需要提供身份证号码、姓名、联系方式等信息&#xff0c;并上传相关证件照片或扫描件。 2. 应用信息登记&#xff1a…

使用 PyTorch 完全分片数据并行技术加速大模型训练

本文&#xff0c;我们将了解如何基于 PyTorch 最新的 完全分片数据并行 (Fully Sharded Data Parallel&#xff0c;FSDP) 功能用 Accelerate 库来训练大模型。 动机 随着机器学习 (ML) 模型的规模、大小和参数量的不断增加&#xff0c;ML 从业者发现在自己的硬件上训练甚至加…