GoLand 2025.2 Help

响应处理示例

在本主题中,我们将介绍几个 HTTP 响应处理示例。 要亲自尝试示例,请探索 auth-requeststest-responses 请求集合

检查响应头、正文与内容类型

在此示例中,我们将创建几个测试来验证以下内容:

  • 请求已成功执行,即响应状态为 200

  • 响应体中包含了头部信息。

  • 响应的内容类型为 application/json

要创建测试,我们调用 测试 方法,属于 client 对象。 在测试中,我们可以通过调用 断言 方法来断言特定条件,该方法属于 客户端 对象,并可引用 response 对象的多个属性进行验证。

### Check response status, headers, and content-type GET https://httpbin.org/get > {% client.test("Request executed successfully", function() { client.assert(response.status === 200, "Response status is not 200"); }); client.test("Headers option exists", function() { client.assert(response.body.hasOwnProperty("headers"), "Cannot find 'headers' option in response"); }); client.test("Response content-type is json", function() { var type = response.contentType.mimeType; client.assert(type === "application/json", "Expected 'application/json' but received '" + type + "'"); }); %}

使用全局变量

在此示例中,我们将从接收到的响应中提取一个值并存入 global variable 中,从而可在后续请求中使用。

第一个请求涉及一个响应处理脚本,该脚本会将接收到的响应体中的身份验证令牌保存到 auth_token 变量中,位于 client.global 下。 为实现此目的,我们使用 client.global.set(VariableName, VariableValue) 构造。 作为 VariableValue 参数,我们使用来自服务器返回的 response body令牌 字段的值。 该值随后被赋给 "auth_token" 变量。

POST https://examples.http-client.intellij.net/body-echo Content-Type: application/json { "token": "my-secret-token" } > {% client.global.set("auth_token", response.body.token); %}

请求执行完成后,可从后续请求(在 {{auth_token}} 变量中)和响应处理脚本(通过 client.global.get("auth_token") 构造)中访问 auth_token 变量。

//Accessing a variable GET https://examples.http-client.intellij.net/headers Authorization: Bearer {{auth_token}}

要从响应头中获取值,请使用 valueOf 方法,属于 headers 对象。 如果收到多个同名的头(例如常见的 Set-Cookie 头),请改用 valuesOf 方法。 该方法将返回一个包含所有响应头值的数组。

POST https://httpbin.org/cookies //Saving a cookie from the first Set-Cookie header > {% client.global.set("my_cookie", response.headers.valuesOf("Set-Cookie")[0]); %}

处理事件流的每一行

如果订阅了事件流,当有新数据可用时,服务器将自动向客户端发送事件。 这些数据可以采用 Server-Sent Events 或以换行符分隔的 JSON(NDJSON)格式。 在 GoLand 中,您可以使用 HTTP Client 的 response.body.onEachLine 方法来对事件流的每一行数据调用一个函数。

假设您有一个服务器定期发送黄金价格信息。 在此示例中,我们编写一个响应处理脚本,其功能如下:

  1. 获取从服务器收到的每一段数据(JSON 对象),并记录其中的价格值。 运行请求后,您可以在 响应处理程序 选项卡中的 服务 工具窗口中查看日志信息。

  2. 当事件数量超过 10 时,将停止处理接收到的数据。 请注意,这不会将您从事件流中取消订阅——只要 HTTP 连接保持打开状态,您仍将继续接收事件(请查看 控制台 选项卡中的 服务 工具窗口)。

  3. 对接收到的数据块进行测试:如果价格低于 45,则测试失败。 您可以在 测试 选项卡中的 服务 工具窗口中查看测试结果。

GET localhost/stocks/subscribe?symbol=GOLD > {% var updatesCount = 0; response.body.onEachLine( (symbolUpdate, unsubscribe) => { updatesCount++; client.log(symbolUpdate.pricePresentation); if (updatesCount > 10) { unsubscribe(); return; } client.test("Price test " + updatesCount, () => { client.assert(symbolUpdate.lastPrice >= 45, "Price must be >= 45"); client.log(symbolUpdate.pricePresentation); }); } ) %}
最后修改日期: 2025年 9月 26日