基础语法
请求格式
基础格式
Method Request-URI HTTP-Version
Header-field: Header-value
Request-Body
其中,GET
请求可以省略 Method
不写;HTTP-Version
可以省略不写,默认使用 1.1 版本。
示例:
GET https://www.baidu.com
注释
使用 //
或 #
编写单行注释
示例:
# 百度首页请求
GET https://www.baidu.com
为请求命名
在请求前一行使用特殊注释格式,可以为请求命名。请求命名后,IDEA 中的 Service 面板会展示请求名称,而不是请求路径。
有如下三种方式
- 使用
###
- 使用
# @name
- 使用
# @name=
示例:
### 百度首页请求
# @name 百度首页请求
# @name=百度首页请求
# 这里还可以加单行注释
GET https://www.baidu.com
请求 URL 换行
当请求路径过长,或者 URL 中参数过多时,可以将 URL 换行,使用 Tab 缩进即可。
示例:
GET https://example.com:8080/api/get/html?
firstname=John&
lastname=Doe&
planet=Tatooine&
town=Freetown
Form 表单换行
提交 Form 表单时,body 中的参数也可以换行,此时换行不需要用 Tab 缩进。
示例:
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
文件所在目录。
示例:
POST https://example.com:8080/api/html/post
Content-Type: application/json
< ./input.json
上传文件
可以在一个请求中上传一份或多份文件。
示例:
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--
禁止重定向
默认情况下会跟随服务器返回的 301
、302
重定向,使用 @no-redirect
注解可以禁止跟随。
示例:
// @no-redirect
GET https://example.com/status/301
禁止保存 Cookies
默认情况下会记录服务器返回的 Set-Cookies
头中返回的 Cookies,并在其他请求中携带返回的 Cookies。
可以通过 @no-cookie-jar
注解禁止保存。
示例:
// @no-cookie-jar
GET example.com/api
保存响应
通过 >>
符号将响应结果保存到文件。
示例:
GET {{host}}/api/bs-login/v1/oauth/inner/login?uid={{uid}}
>> ./loginResponse.json
高级语法 - 变量
变量命名规则与使用方式
在 HTTP 请求中,可以使用 {{variable}}
格式引用变量。
变量名可以包含:字母、数字、英文下划线_
、英文点.
。
示例:
GET https://www.baidu.com
Authorization: {{authToken}}
变量的类型
按照变量作用域范围,分为如下几种变量。
- 环境变量
- 全局变量
- 脚本内变量
- 请求内变量
- 动态变量
环境变量
声明在 .env.json
环境文件中的变量,对所有脚本生效。
在打开一个脚本文件后,可以选择生效的环境。或者在执行请求时,选择一个环境。
环境变量文件有两种:
- 公有环境变量,文件名为
http.env.json
。 - 私有环境变量,文件名
http.private.env.json
。
两种环境变量文件的格式相同,一般建议 HOST、公共参数 放到公有环境变量,密码、认证 Token 等敏感信息放到私有环境变量。私有环境变量会覆盖公有环境变量。
环境变量文件声明在脚本所在目录。JSON 文件第一层的属性 Key 即为环境名称,属性 Value 为此环境的变量。
例如一个包含 test
、prod
环境的公有变量文件内容为:
{
"test": {
"host": "http://test.com",
"uid": "test@xxx.com"
},
"prod": {
"host": "http://prod.com",
"uid": "test@xxx.com"
}
}
例如一个包含 test
、prod
环境的私有变量文件内容为:
{
"test": {
"username": "user",
"password": "pass"
},
"prod": {
"username": "user",
"password": "pass"
}
}
使用时按如下格式引用:
GET {{host}}/api/auth/token?user={{username}}&pass={{password}}
Authorization: Basic {{username}} {{password}}
全局变量
全局变量通过脚本设置。通过 client.global.set
函数设置。
全局变量会覆盖脚本中设置的变量。
示例:
### 获取认证 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 文件中,可以被此文件中的请求访问。注意,声明变量的语句后面的请求,才能访问此变量。
声明格式为:
@变量名 = 变量值
示例:
@uid = liuqingtong@corp.netease.com
### 获取测试环境访问 token
GET {{host}}/api/bs-login/v1/oauth/inner/login?uid={{uid}}
请求内变量
请求内变量声明在请求前的脚本中,仅针对脚本后的一次请求生效。
通过 request.variables.set
函数设置。
示例:
### 获取测试环境访问 token
<{%
request.variables.set("uid", "liuqingtong@corp.netease.com")
%}
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 脚本,用于在请求发起前、请求响应后进行数据处理。可以借此实现自动化测试。
使用脚本时,需单独另起一行,以 >
字符开头,后面跟引用脚本路径,或跟嵌入脚本。
引用脚本
示例:
### 获取测试环境访问 token
GET {{host}}/api/bs-login/v1/oauth/inner/login?uid={{uid}}
> ./TokenHandler.js
嵌入脚本
嵌入脚本使用 {%
和 %}
包裹脚本内容,脚本可以换行。
示例:
### 获取测试环境访问 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