基础语法

请求格式

基础格式

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--

禁止重定向

默认情况下会跟随服务器返回的 301302 重定向,使用 @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 环境文件中的变量,对所有脚本生效。
在打开一个脚本文件后,可以选择生效的环境。或者在执行请求时,选择一个环境。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

环境变量文件有两种:

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

环境变量文件声明在脚本所在目录。JSON 文件第一层的属性 Key 即为环境名称,属性 Value 为此环境的变量。
例如一个包含 testprod 环境的公有变量文件内容为:

{
  "test": {
    "host": "http://test.com",
    "uid": "test@xxx.com"
  },
  "prod": {
    "host": "http://prod.com",
    "uid": "test@xxx.com"
  }
}

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

{
  "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

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐