探索 HTTP 请求语法
本节介绍 HTTP 请求格式。 有关发送 HTTP 请求和查看 HTTP 响应的更多信息,请参阅 HTTP 客户端。
要在 PyCharm 代码编辑器中编写 HTTP 请求,请使用以下通用语法:
在 HTTP 请求中使用注释
在请求中,以
//或#开头可将任意一行设为注释行。// A basic request GET http://example.com/a/
为 HTTP 请求设置名称
要在 运行/调试配置、 在任何地方搜索 和 运行任何内容 中快速找到您的请求,您可以为其指定名称。
在请求上方的
###、# @name或# @name =旁输入名称。
如果请求没有名称,PyCharm 会使用其在请求文件中的位置(例如 #1 )作为请求名称。 如果请求文件包含多个同名请求,PyCharm 会在每个名称后附加请求的位置编号。 这样,每个请求名称都是唯一的,您就可以在 服务 工具窗口、运行/调试配置等位置轻松找到所需的请求。

对 GET 请求使用简写形式
对于 GET 请求,您可以省略请求方法,仅指定 URI。
// A basic request https://example.com/a/
在单个文件中编写多个请求
在其下方键入
###分隔符以标记请求的结束。// A basic request https://example.com/a/ ###在分隔符下方编写另一个请求。
// A basic request https://example.com/a/ ### // A second request using the GET method https://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如果由于查询字符串导致 URL 过长,您可以使用专用意图操作将每个查询参数放在新的一行上。 将插入符号置于查询字符串部分,按 Alt+Enter (显示上下文操作 ),然后选择 将查询形参放在单独的行中。
GET https://example.com:8080/api/get/html?firstname=John&lastname=Doe&planet=Tatooine&town=FreetownGET https://example.com:8080/api/get/html? firstname=John& lastname=Doe& planet=Tatooine& town=Freetown类似地,您可以使用
Content-Type: application/x-www-form-urlencoded格式化请求中的正文。 将插入符号置于正文,按 Alt+Enter (显示上下文操作 ),然后选择 将form-urlencoded 形参放在单独的行中。POST https://ijhttp-examples.jetbrains.com/post Content-Type: application/x-www-form-urlencoded key1=value1&key2=value2&key3=value3&key4=value4&key5=value5POST https://ijhttp-examples.jetbrains.com/post Content-Type: application/x-www-form-urlencoded key1 = value1 & key2 = value2 & key3 = value3 & key4 = value4 & key5 = value5要配置
x-www-form-urlencoded正文的换行,请使用 。 要配置=前后的空格以及&前的空格,请使用 。
通过身份验证访问 Web 服务
提供请求正文
在请求中,请在请求正文前添加一个空行,然后执行以下任一操作:
直接输入请求正文:
// The request body is provided in place POST https://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 标头字段值设置为 PyCharm 支持的语言 之一,则相应的语言片段将被 自动注入 到 HTTP 请求消息正文中。 如果未指定 Content-Type ,您可以手动注入语言片段。
要从文件中读取请求正文,请键入
<符号并跟上文件路径。// The request body is read from a file POST https://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 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" // 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--
禁用跟随重定向
当 HTTP 请求被重定向(收到 3xx 状态码)时,将返回重定向页面的响应。 在 服务 工具窗口中,您可以查看重定向页面的响应以及请求期间发生的所有重定向。
您可能希望禁用跟随重定向。 在这种情况下,将返回实际的重定向响应标头(例如 301 或 302)。
在请求之前,添加一个带有
@no-redirect标记的注释行。// @no-redirect example.com/status/301
如果您已经有一个重定向的请求,您可以在 服务 工具窗口中的 Redirections 列表旁点击 禁用。 这会将 @no-redirect 标记添加到初始请求中。

禁用将请求保存到请求历史记录
如有必要,您可以阻止将请求保存到 请求历史记录。 如果请求包含某些敏感数据且您不希望记录它,这将很有用。
在请求之前,添加一个带有
@no-log标记的注释行。// @no-log GET example.com/api
禁用将收到的 Cookie 保存到 Cookie 罐
如有必要,您可以阻止将收到的 Cookie 保存到 Cookie 罐。 这样您将避免从 http-client.cookies 文件手动删除不需要的 Cookie。
在请求之前,添加一个带有
@no-cookie-jar标记的注释行。// @no-cookie-jar GET example.com/api
禁用编码
默认情况下,HTTP 客户端将请求参数和正文编码为 ASCII 格式。 例如,请求参数中的斜杠字符将作为 %2F 发送。 您可以禁用编码以按原样发送请求。
在请求之前,添加一个带有
@no-auto-encoding标记的注释行。使用该标记时,请求参数和正文不会被编码:
# @no-auto-encoding GET https://examples.com/api? name=@#$somebody& qwerty=%40%23%24生成的请求将原样发送:
https://examples.com/api?name=@#$somebody&qwerty=%40%23%24默认情况下,如果不使用该标记,则启用编码。
### Default behavior GET https://examples.com/api? name=@#$somebody& qwerty=%40%23%24在此请求中,参数将被编码:
https://examples.com/api?name=%40%23%24somebody&qwerty=%40%23%24
自定义 HTTP 请求超时
HTTP Client 在与服务器建立连接时具有 60 秒的超时,并在现有连接中等待新数据包时具有单独的 60 秒超时。 您可以自定义这两个超时。
要为已建立的连接中的新数据包设置超时,请在请求之前添加一个带有
@timeout标记的注释行。# @timeout 600 GET example.com/api要设置连接超时,请在请求之前添加一个带有
@connection-timeout标记的注释行。// @connection-timeout 2 m GET example.com/api
默认情况下,超时值的单位为秒,但您可以在值后添加明确的时间单位: ms 表示毫秒、 s 表示秒、 m 表示分钟,例如 100 ms 或 5 m。
处理响应
您可以使用 JavaScript 处理响应。 在请求之后键入 > 字符,并指定 JavaScript 文件的路径和名称,或者将响应处理脚本代码包裹在 {% ... %} 中。
有关更多信息,请参阅 HTTP 响应处理 API 参考。
重定向响应
您可以将响应重定向到文件。 如果文件已存在,使用 >> 创建带后缀的新文件,使用 >>! 覆盖该文件。 您可以指定绝对路径,或相对于当前 HTTP 请求文件的路径。 您还可以在路径中使用变量,包括环境变量以及以下预定义变量:
{{$projectRoot}}指向项目根目录{{$historyFolder}}指向 .idea/httpRequests/
下面的示例 HTTP 请求会在位于 HTTP 请求文件旁边的 myFolder 中创建 myFile.json ,并将响应重定向到该文件。 如果该文件已存在,则会创建 myFile-1.json 。
下面的示例 HTTP 请求会在 .idea/httpRequests/ 中创建 myFile.json 。 如果该文件已存在,则会覆盖该文件。 同时,它还使用位于项目根目录中的 handler.js 脚本 处理响应。