首先完成“第1课:n8n 简介与集成思维”即可解锁本课程。转到上一课

简介

HTTP Request 节点是 n8n 中的瑞士军刀。当你需要的服务没有内置集成时,这个节点允许你直接调用任意 REST API——GET、POST、PUT、PATCH、DELETE,应有尽有。响应返回后,n8n 会提供完整的 JSON payload,你可以使用表达式精确提取你所关心的字段。

本课将完整演示这一循环:配置节点、发起请求、读取响应结构,并将特定值接入工作流的下一步。

配置 HTTP Request 节点

将 HTTP Request 节点添加到画布上,然后首先填写三项内容:HTTP 方法、URL,以及身份验证(如果 API 需要的话)。

对于无需身份验证的公共接口,在 n8n URL 表达式字段中最简单的 GET 请求如下所示:

javascript
https://api.open-meteo.com/v1/forecast?latitude=51.5&longitude=-0.1&current_weather=true

如果 API 需要密钥,请进入 Authentication 部分,选择 Header Auth,然后设置请求头名称(通常为 Authorization)和值(通常为 Bearer YOUR_TOKEN)。你可以将 token 保存在 n8n Credential 中,这样它就不会被硬编码到节点里。

当你需要发送 JSON body 时(例如用于创建资源的 POST 请求),请将 Body Content Type 设置为 JSON,并在 Body 字段中编写 payload:

json
{
"name": "{{ $json.customerName }}",
"email": "{{ $json.customerEmail }}"
}

双花括号语法是 n8n 的表达式引擎,会在运行时从上一个节点的输出中提取值。

流程图,展示 HTTP Request 节点的配置步骤:Method → URL → Authentication → Body → Execute

读取响应结构

点击 Execute Node 后,n8n 会在右侧的 Output 面板中显示响应。每个响应都会呈现三项内容:状态码、请求头和 body。默认情况下,n8n 会自动解析 JSON body,并将其作为结构化数据返回,方便你进行遍历。

假设 Open-Meteo API 返回如下内容:

json
{
"latitude": 51.5,
"longitude": -0.1,
"current_weather": {
"temperature": 14.2,
"windspeed": 11.3,
"weathercode": 3
}
}

在 Output 面板中,你可以点击展开树状结构来查看每个嵌套字段。这一个探索步骤非常重要——在编写任何表达式之前先执行它,这样你就能知道准确的 key 路径。

如果 API 返回的不是 JSON 响应(纯文本、XML),请启用 Return Full Response 选项,并将 Response Format 改为 Text,然后在下游的 Code 节点中手动处理解析。

使用表达式提取数据

了解结构后,你可以在任意下游节点中使用 n8n 的表达式语法引用字段。HTTP Request 输出的根始终可以通过节点名称访问。

在下一个节点中获取上面示例中的温度:

javascript
{{ $node["HTTP Request"].json["current_weather"]["temperature"] }}

或者,如果你正位于紧接其后的节点中(即隐式的前一个节点),可以使用简写形式:

javascript
{{ $json["current_weather"]["temperature"] }}

当 API 返回一个数组时——例如订单列表——响应 body 本身就是一个数组,或者它会被嵌套在 data 这样的 key 下。要对其进行循环处理,可以将 HTTP Request 节点连接到 Split In Batches 节点,或使用设置为 Split Out Items 的 Item Lists 节点,之后每个下游执行会一次接收一个 item。

如果不想拆分,下面是如何直接引用第三个 item 的 id 字段(从 0 开始计数):

javascript
{{ $json["data"][2]["id"] }}
🖥️ [建议在此处插入示意图:左侧展示 JSON 响应树状结构,箭头指向右侧的表达式引用]

常见错误

发送 POST 数据时,最常见的问题是缺少 Content-Type 请求头。如果你将 Body Content Type 设置为 JSON,n8n 会自动添加该请求头。如果切换到 Raw,则需要手动添加请求头:Content-Type 的值为 application/json。

另一个常见错误是尝试引用的字段比预期深一层。在编写表达式之前,请始终使用 Output 面板验证准确的路径——对 API 响应结构的假设往往是错误的。

第三个问题是速率限制。如果你的工作流频繁针对同一 API 运行,请在迭代之间添加一个 Wait 节点,并查看 API 文档中的速率限制请求头(Retry-After、X-RateLimit-Remaining)。n8n 不会自动处理速率限制。

总结

HTTP Request 节点涵盖三个操作:设置方法和 URL、在需要时进行身份验证、并发送可选的 body。执行后,使用 Output 面板浏览响应树,然后通过表达式在下游节点中引用特定字段——简写形式使用 $json,跨节点访问则使用 $node["NodeName"].json。对于数组响应,请在逐项处理之前先拆分 items。熟悉这一循环后,你就可以在 n8n 中与几乎任何 REST API 进行集成。

课后练习

课程检查点

巩固所学知识,获取作业反馈。

0/7
01以下哪个是正确的简写表达式,用于从紧邻的上一个 HTTP Request 节点的 JSON 响应中访问名为 'status' 的字段?
02在 n8n 的 HTTP Request 节点中发送带有 JSON body 的 POST 请求时,需要配置哪项设置才能让 n8n 自动包含正确的 Content-Type 请求头?
03你收到一个 API 响应,其中数据嵌套为 response.orders[0].id。在下游节点中,以下哪个表达式能正确获取该值?
04某个 API 在 'items' 这个 key 下以 JSON 数组形式返回 50 个产品的列表。你希望在下游节点中分别处理每个产品。在 n8n 中的推荐做法是什么?
05在编写引用 API 响应的表达式之前,探索准确 key 路径的最佳位置是哪里?
06你希望将存储在 n8n Credential 中的 API token 作为 Bearer token 传递。HTTP Request 节点中哪种身份验证方式是为这种情况设计的?
07当工作流快速连续调用同一接口时,n8n 会自动处理 API 速率限制。
已回答 · 0/7