【GoLand教程】GoLand HTTP请求语法

本节介绍 HTTP 请求格式。有关发送 HTTP 请求和查看 HTTP 响应的详细信息,请参阅上文HTTP 客户端。
要在 GoLand 代码编辑器中编写 HTTP 请求,请使用以下通用语法:
Method Request-URI HTTP-Version
Header-field: Header-value
Request-Body
在 HTTP 请求中使用注释
在请求中,以
//
或开始任何行,#
使其成为注释行。// A basic request GET http://example.com/a/
为 HTTP 请求设置名称
要在运行/调试配置、Search Everywhere和Run Anything中快速找到您的请求,您可以为其命名。
###
在、# @name
或旁边的请求上方键入一个名称# @name =
。
如果请求没有名称,GoLand 将使用其在请求文件中的位置,例如#1
,作为请求名称。如果一个请求文件包含多个具有相同名称的请求,GoLand 会将请求位置编号附加到每个名称。这将使每个请求名称唯一,以便您可以在服务工具窗口、运行/调试配置等中轻松找到所需的名称。
对 GET 请求使用简写形式
对于GET请求,您可以省略请求方法并仅指定 URI。
// A basic request http://example.com/a/
在一个文件中编写多个请求
通过在请求下方键入
###
分隔符来标记请求的结束。// A basic request http://example.com/a/ ###
在分隔符下方编写另一个请求。
// A basic request http://example.com/a/ ### // A second request using the GET method http://example.com:8080/api/html/get?id=123&value=content
将长请求分成几行
缩进除第一行之外的所有查询字符串行。
// Using line breaks with indent GET http://example.com:8080 /api /html /get ?id=123 &value=content
通过身份验证访问 Web 服务
根据您访问的 Web 服务,提供基本或摘要 授权标头。
// Basic authentication GET http://example.com Authorization: Basic username password ### // Digest authentication GET http://example.com Authorization: Digest username password
与其他 HTTP 请求的元素类似,提供的
username
和password
可以通过环境变量参数化。
提供请求消息体
在请求中,在请求正文前添加一个空行并执行以下操作之一:
在适当的位置键入请求正文:
// The request body is provided in place POST http://example.com:8080/api/html/post HTTP/1.1 Content-Type: application/json Cookie: key=first-value { "key" : "value", "list": [1, 2, 3] }
如果您将Content-Type标头字段值设置为GoLand 支持的语言之一,则相应的语言片段将自动注入到 HTTP 请求消息正文中。如果没有指定Content-Type ,您可以手动注入语言片段。
要从文件中读取请求正文,请键入
<
符号,后跟文件的路径。// The request body is read from a file POST http://example.com:8080/api/html/post Content-Type: application/json < ./input.json
使用 multipart/form-data 内容类型
将请求的Content-Type设置为multipart/form-data。要将文件作为multipart/form-data消息的一部分发送,请在Content-Disposition
filename
标头中包含参数。POST http://example.com/api/upload HTTP/1.1 Content-Type: multipart/form-data; boundary=boundary --boundary Content-Disposition: form-data; name="first"; filename="input.txt" // The 'input.txt' file will be uploaded < ./input.txt --boundary Content-Disposition: form-data; name="second"; filename="input-second.txt" // A temporary 'input-second.txt' file with the 'Text' content will be created and uploaded Text --boundary Content-Disposition: form-data; name="third"; // The 'input.txt' file contents will be sent as plain text. < ./input.txt --boundary--
要加快创建多部分/表单数据请求,请使用mptr 实时模板。
禁用以下重定向
当 HTTP 请求被重定向(收到 3xx 状态码)时,会返回重定向的页面响应。在服务工具窗口中,您可以查看重定向的页面响应以及请求期间发生的所有重定向。
您可能想要禁用以下重定向。在这种情况下,会返回实际的重定向响应头(例如 301 或 302)。
在请求之前,添加带有
@no-redirect
标记的注释行。// @no-redirect example.com/status/301
如果您已经有重定向请求,您可以单击服务工具窗口中列表旁边的禁用。这会将标签添加到初始请求中。Redirections
`@no-redirect`
禁用将请求保存到请求历史记录
如有必要,您可以阻止将请求保存到requests history。如果请求包含一些敏感数据并且您不想记录它,这会很有帮助。
在请求之前,添加带有
@no-log
标记的注释行。// @no-log GET example.com/api
禁用将收到的 cookie 保存到 cookie jar
如有必要,您可以阻止将接收到的 cookie 保存到 cookies jar中。这样,您将避免手动从http-client.cookies文件中删除不需要的 cookie。
在请求之前,添加带有
@no-cookie-jar
标记的注释行。// @no-cookie-jar GET example.com/api
使用变量
编写 HTTP 请求时,您可以使用variables参数化其元素。变量可以保存请求的主机、端口和路径的值、查询参数或值、标头值或在请求正文或外部文件中使用的任意值。
在请求中提供一个变量
- 将变量括在双花括号中作为
{{variable}}
.
变量名只能包含字母、数字、下划线_
或连字符-
。变量的值可以是以下任何一种:
- 通过环境变量为每个环境显式提供
- 通过
$uuid
、$timestamp
和$randomInt
预定义的动态变量动态生成 - 通过该方法在响应处理程序脚本中以编程方式定义
client.global.set
。
环境变量
环境变量允许您在项目中存储一组环境定义。例如,您可以创建和使用{{host}}
变量,而不是在请求中明确提供主机名。执行请求时,您可以在定义的环境之间进行选择,从而将其发送到特定主机:
在查看请求的结构、在浏览器中打开请求、执行请求并为其创建运行/调试配置时,所选环境将用作默认环境。
定义环境变量
环境变量在环境文件中定义。
在请求的编辑器面板顶部,在Run with列表中,选择要添加环境的位置:
- 如果您希望环境公开,请选择将环境添加到公共文件...。这会将环境添加到http-client.env.json文件中。此文件可以包含常见变量,例如主机名、端口或查询参数,并且旨在与您的项目一起分发。
- 如果您希望环境是私有的,请选择将环境添加到私有文件...。这会将环境添加到http-client.private.env.json文件中。此文件可能包含密码、令牌、证书和其他敏感信息。默认情况下,它会添加到 VCS 忽略文件列表中。http-client.private.env.json文件中指定的变量值会覆盖公共环境文件中的值。
如有必要,您可以手动创建这些文件。
- 使用所需的变量填充创建的文件。
以下示例http-client.env.json环境文件定义了两个环境:开发和生产。附加的http-client.private.env.json文件包含敏感的授权数据。
http-client.env.json
{
"development": {
"host": "localhost",
"id-value": 12345,
"username": "",
"password": "",
"my-var": "my-dev-value"
},
"production": {
"host": "example.com",
"id-value": 6789,
"username": "",
"password": "",
"my-var": "my-prod-value"
}
}
http-client.private.env.json
{
"development": {
"username": "dev-user",
"password": "dev-password"
},
"production": {
"username": "user",
"password": "password"
}
}
示例 HTTP 请求如下:
GET http://{{host}}/api/json/get?id={{id-value}}
Authorization: Basic {{username}} {{password}}
Content-Type: application/json
{
"key": "{{my-var}}"
}
在执行请求之前,GoLand 允许您使用请求编辑器面板顶部的Run with列表来选择执行环境。
根据您的选择,生成的请求将是以下之一:
development
GET http://localhost/api/json/get?id=12345
Authorization: Basic dev-user dev-password
Content-Type: application/json
{
"key": "my-dev-value"
}
production
GET http://example.com/api/json/get?id=6789
Authorization: Basic user password
Content-Type: application/json
{
"key": "my-prod-value"
}
如果在执行请求时变量未解析,GoLand 会显示一条通知,让您快速创建、更新或选择不同的执行环境。
动态变量
每次运行请求时,动态变量都会生成一个值:
$uuid
:生成一个通用唯一标识符(UUID-v4)$timestamp
: 生成当前的 UNIX 时间戳$randomInt
: 生成 0 到 1000 之间的随机整数。
例如:
GET http://localhost/api/get?id={{$uuid}}
处理响应
您可以使用 JavaScript 处理响应。键入>
请求后的字符并指定 JavaScript 文件的路径和名称或将响应处理程序脚本代码包裹在{% ... %}
.
GET https://httpbin.org/get
> /path/to/responseHandler.js
GET https://httpbin.org/get
> {%
client.global.set("my_cookie", response.headers.valuesOf("Set-Cookie")[0]);
%}
重定向响应
您可以将响应重定向到文件。如果文件已存在,则用于>>
创建带有后缀的新文件,如果文件存在>>!
则重写该文件。您可以指定绝对路径或相对于当前 HTTP 请求文件的相对路径。您还可以在路径中使用变量,包括环境变量和以下预定义变量:
{{$projectRoot}}
指向项目根目录:.idea{{$historyFolder}}
指向.idea /httpRequests/
以下示例 HTTP 请求在 HTTP 请求文件旁边的 myFolder 中创建 myFile.json 并将响应重定向到它。如果文件已经存在,它会创建myFile-1.json等等。
POST https://httpbin.org/post
Content-Type: application/json
{
"id": 999,
"value": "content"
}
>> myFolder/myFile.json
以下示例 HTTP 请求在.idea /httpRequests/中创建myFile.json。如果文件已经存在,它会覆盖该文件。它还使用位于项目根目录中的handler.js脚本处理响应。
POST https://httpbin.org/post
Content-Type: application/json
{
"id": 999,
"value": "content"
}
> {{$projectRoot}}/handler.js
>>! {{$historyFolder}}/myFile.json
对于 Windows,使用反斜杠指定路径
\
。