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": "test@xxx.com"
  },
  "prod": {
    "host": "http://prod.com",
    "uid": "test@xxx.com"
  }
}

例如一个包含 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 = liuqingtong@corp.netease.com

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

请求内变量

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

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

示例:

http 复制代码
### 获取测试环境访问 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 脚本,用于在请求发起前、请求响应后进行数据处理。可以借此实现自动化测试。

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

引用脚本

示例:

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

相关推荐
世间万物皆对象25 分钟前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了1 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·1 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic1 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王1 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康2 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神2 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342732 小时前
Java实现离线身份证号码OCR识别
java·开发语言
阿龟在奔跑4 小时前
引用类型的局部变量线程安全问题分析——以多线程对方法局部变量List类型对象实例的add、remove操作为例
java·jvm·安全·list
飞滕人生TYF4 小时前
m个数 生成n个数的所有组合 详解
java·递归