IDEA自带 .http 请求工具文档

基础语法

请求格式

基础格式

http 复制代码
Method Request-URI HTTP-Version
Header-field: Header-value

Request-Body

其中,GET 请求可以省略 Method 不写;HTTP-Version 可以省略不写,默认使用 1.1 版本。

示例:

http 复制代码
GET https://www.baidu.com

注释

使用 //# 编写单行注释

示例:

http 复制代码
# 百度首页请求
GET https://www.baidu.com

为请求命名

在请求前一行使用特殊注释格式,可以为请求命名。请求命名后,IDEA 中的 Service 面板会展示请求名称,而不是请求路径。

有如下三种方式

  • 使用 ###
  • 使用 # @name
  • 使用 # @name=

示例:

http 复制代码
### 百度首页请求
# @name 百度首页请求
# @name=百度首页请求
# 这里还可以加单行注释
GET https://www.baidu.com

请求 URL 换行

当请求路径过长,或者 URL 中参数过多时,可以将 URL 换行,使用 Tab 缩进即可。

示例:

http 复制代码
GET https://example.com:8080/api/get/html?
    firstname=John&
    lastname=Doe&
    planet=Tatooine&
    town=Freetown

Form 表单换行

提交 Form 表单时,body 中的参数也可以换行,此时换行不需要用 Tab 缩进。

示例:

http 复制代码
POST https://ijhttp-examples.jetbrains.com/post
Content-Type: application/x-www-form-urlencoded

key1 = value1 &
key2 = value2 &
key3 = value3 &
key4 = value4 &
key5 = value5

读取文件作为请求 Body

文件路径可以使用绝对路径或相对路径。使用相对路径时,是相对于当前 .http 文件所在目录。

示例:

http 复制代码
POST https://example.com:8080/api/html/post
Content-Type: application/json

< ./input.json

上传文件

可以在一个请求中上传一份或多份文件。

示例:

http 复制代码
POST https://example.com/api/upload HTTP/1.1
Content-Type: multipart/form-data; boundary=boundary

// 直接读取文件作为上传的文件内容
--boundary
Content-Disposition: form-data; name="first"; filename="input.txt"

< ./input.txt

// 将固定文本作为上传的文件内容
--boundary
Content-Disposition: form-data; name="second"; filename="input-second.txt"

Text

// 将文件内容作为表单中的文本类型参数提交
--boundary
Content-Disposition: form-data; name="third";

< ./input.txt --boundary--

禁止重定向

默认情况下会跟随服务器返回的 301302 重定向,使用 @no-redirect 注解可以禁止跟随。

示例:

http 复制代码
// @no-redirect
GET https://example.com/status/301

禁止保存 Cookies

默认情况下会记录服务器返回的 Set-Cookies 头中返回的 Cookies,并在其他请求中携带返回的 Cookies。

可以通过 @no-cookie-jar 注解禁止保存。

示例:

http 复制代码
// @no-cookie-jar
GET example.com/api

保存响应

通过 >> 符号将响应结果保存到文件。

示例:

http 复制代码
GET {{host}}/api/bs-login/v1/oauth/inner/login?uid={{uid}}

>> ./loginResponse.json

高级语法 - 变量

变量命名规则与使用方式

在 HTTP 请求中,可以使用 {``{variable}} 格式引用变量。

变量名可以包含:字母、数字、英文下划线_、英文点.

示例:

http 复制代码
GET https://www.baidu.com
Authorization: {{authToken}}

变量的类型

按照变量作用域范围,分为如下几种变量。

  • 环境变量
  • 全局变量
  • 脚本内变量
  • 请求内变量
  • 动态变量

环境变量

声明在 .env.json 环境文件中的变量,对所有脚本生效。

在打开一个脚本文件后,可以选择生效的环境。或者在执行请求时,选择一个环境。

环境变量文件有两种:

  1. 公有环境变量,文件名为 http.env.json
  2. 私有环境变量,文件名 http.private.env.json
    两种环境变量文件的格式相同,一般建议 HOST、公共参数 放到公有环境变量,密码、认证 Token 等敏感信息放到私有环境变量。私有环境变量会覆盖公有环境变量。

环境变量文件声明在脚本所在目录。JSON 文件第一层的属性 Key 即为环境名称,属性 Value 为此环境的变量。

例如一个包含 testprod 环境的公有变量文件内容为:

json 复制代码
{
  "test": {
    "host": "http://test.com",
    "uid": "[email protected]"
  },
  "prod": {
    "host": "http://prod.com",
    "uid": "[email protected]"
  }
}

例如一个包含 testprod 环境的私有变量文件内容为:

json 复制代码
{
  "test": {
    "username": "user",
    "password": "pass"
  },
  "prod": {
    "username": "user",
    "password": "pass"
  }
}

使用时按如下格式引用:

http 复制代码
GET {{host}}/api/auth/token?user={{username}}&pass={{password}}
Authorization: Basic {{username}} {{password}}

全局变量

全局变量通过脚本设置。通过 client.global.set 函数设置。

全局变量会覆盖脚本中设置的变量。

示例:

http 复制代码
### 获取认证 token
GET {{host}}/api/auth/token?user={{username}}&pass={{password}}

<{%
    client.global.set('authToken', response.data.token);
%}


### 访问接口
GET {{host}}/api/user/me
Authorization: {{authToken}}

脚本内变量

脚本内变量声明在 .http 文件中,可以被此文件中的请求访问。注意,声明变量的语句后面的请求,才能访问此变量。

声明格式为:

http 复制代码
@变量名 = 变量值

示例:

http 复制代码
@uid = [email protected]

### 获取测试环境访问 token 
GET {{host}}/api/bs-login/v1/oauth/inner/login?uid={{uid}}

请求内变量

请求内变量声明在请求前的脚本中,仅针对脚本后的一次请求生效。

通过 request.variables.set 函数设置。

示例:

http 复制代码
### 获取测试环境访问 token 
<{%
request.variables.set("uid", "[email protected]")
%}

GET {{host}}/api/bs-login/v1/oauth/inner/login?uid={{uid}}

动态变量

动态变量是一些动态值,每次获取变量时得到的结果都不同。动态变量命名以 $ 开头。内置动态变量有:

  • $uuid $random.uuid 生成一个 UUID
  • $timestamp UNIX 时间戳
  • $isoTimestamp ISO-8601 格式的时间戳,UTC 时区
  • $randomInt 0-1000 的随机整数
  • $random.integer(from, to) 随机整数,可以指定范围,包括 from,不包括 to
  • $random.float(from, to) 随机浮点数,包括 from,不包括 to
  • $random.alphabetic(length) 生成指定长度的,由大小写字母组成的字符串
  • $random.alphanumeric(length) 生成指定长度的,由大小写字母、数字、下划线组成的 字符串
  • $random.hexadecimal(length) 生成指定长度的十六进制数字
  • $random.email 随机邮箱
  • $exampleServer IDEA 内置的 Web 服务器,仅在 IDEA 中可以访问。
  • $projectRoot 项目根目录,仅在 IDEA 中可以访问。
  • $historyFolder 项目根目录下的 .idea/httpRequests/,仅在 IDEA 中可以访问。

高级语法 - 脚本

脚本类型

.http 文件中可以嵌入或引用 JavaScript 脚本,用于在请求发起前、请求响应后进行数据处理。可以借此实现自动化测试。

使用脚本时,需单独另起一行,以 > 字符开头,后面跟引用脚本路径,或跟嵌入脚本。

引用脚本

示例:

http 复制代码
### 获取测试环境访问 token 
GET {{host}}/api/bs-login/v1/oauth/inner/login?uid={{uid}}

> ./TokenHandler.js

嵌入脚本

嵌入脚本使用 {%%} 包裹脚本内容,脚本可以换行。

示例:

http 复制代码
### 获取测试环境访问 token 
GET {{host}}/api/bs-login/v1/oauth/inner/login?uid={{uid}}

> {% 
client.global.set('authToken', response.data.token);
%}

JavaScript 脚本 API

https://www.jetbrains.com/help/idea/http-response-handling-api-reference.html

相关推荐
面朝大海,春不暖,花不开3 分钟前
自定义Spring Boot Starter的全面指南
java·spring boot·后端
得过且过的勇者y4 分钟前
Java安全点safepoint
java
夜晚回家39 分钟前
「Java基本语法」代码格式与注释规范
java·开发语言
斯普信云原生组1 小时前
Docker构建自定义的镜像
java·spring cloud·docker
wangjinjin1801 小时前
使用 IntelliJ IDEA 安装通义灵码(TONGYI Lingma)插件,进行后端 Java Spring Boot 项目的用户用例生成及常见问题处理
java·spring boot·intellij-idea
wtg44521 小时前
使用 Rest-Assured 和 TestNG 进行购物车功能的 API 自动化测试
java
白宇横流学长1 小时前
基于SpringBoot实现的大创管理系统设计与实现【源码+文档】
java·spring boot·后端
fat house cat_2 小时前
【redis】线程IO模型
java·redis
stein_java3 小时前
springMVC-10验证及国际化
java·spring
weixin_478689763 小时前
C++ 对 C 的兼容性
java·c语言·c++