第 6 章

HTTP Request:调用任意 API

Ch06 HTTP Request:调用任意 API

HTTP Request 节点是 n8n 中使用频率最高的节点,没有之一。它让你无需编写任何网络代码,就能调用世界上几乎任何有 REST API 的服务——从 OpenAI 到 Stripe,从内部微服务到政府数据开放平台。本章深入讲解 HTTP Request 节点的每一个配置项,并通过完整示例覆盖最常见的 API 调用模式。

节点配置全解

基础配置

Method:HTTP 方法,支持 GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS。

URL:目标 API 地址,支持 n8n 表达式动态插值,如 https://api.github.com/repos/{{ $json.owner }}/{{ $json.repo }}/issues

Authentication:认证方式,n8n 内置支持:

Headers 配置

大多数 REST API 需要设置 Content-Type 和 Authorization:

{
  "Content-Type": "application/json",
  "Authorization": "Bearer {{ $vars.API_KEY }}",
  "X-Custom-Header": "custom-value"
}

Body(请求体)配置

POST/PUT/PATCH 请求通常需要请求体:

Query Parameters(查询参数)

GET 请求的参数通过 Query Parameters 配置,n8n 自动进行 URL 编码:

page=1&limit=20&status=active&search={{ $json.keyword }}

响应处理

Response Format

实战示例

示例一:调用 OpenAI Chat API

{
  "method": "POST",
  "url": "https://api.openai.com/v1/chat/completions",
  "headers": {
    "Authorization": "Bearer {{ $vars.OPENAI_API_KEY }}",
    "Content-Type": "application/json"
  },
  "body": {
    "model": "gpt-4o",
    "messages": [
      {
        "role": "system",
        "content": "You are a helpful assistant."
      },
      {
        "role": "user",
        "content": "{{ $json.userMessage }}"
      }
    ],
    "temperature": 0.7,
    "max_tokens": 1000
  }
}

执行后,$json.choices[0].message.content 即为 AI 回复内容。

示例二:GitHub API 创建 Issue

{
  "method": "POST",
  "url": "https://api.github.com/repos/{{ $json.owner }}/{{ $json.repo }}/issues",
  "headers": {
    "Authorization": "token {{ $vars.GITHUB_TOKEN }}",
    "Accept": "application/vnd.github.v3+json"
  },
  "body": {
    "title": "{{ $json.issueTitle }}",
    "body": "{{ $json.issueBody }}",
    "labels": ["bug", "auto-created"]
  }
}

示例三:处理分页 API

很多 API 分页返回数据。使用 Loop 和 Code 节点实现自动翻页:

// Code 节点:处理分页逻辑
const staticData = $getWorkflowStaticData('global');
const allItems = staticData.collectedItems || [];

// 将当前页数据加入收集数组
const currentPageItems = items.map(i => i.json);
allItems.push(...currentPageItems);

// 判断是否还有下一页
const hasNextPage = items.length === 100; // 假设每页 100 条
const nextPage = (staticData.currentPage || 1) + 1;

if (hasNextPage) {
  staticData.currentPage = nextPage;
  staticData.collectedItems = allItems;
  // 继续循环(连接到 HTTP Request 节点实现翻页)
  return items;
} else {
  // 收集完毕,重置状态,返回所有数据
  staticData.currentPage = 1;
  staticData.collectedItems = [];
  return allItems.map(item => ({ json: item }));
}

高级特性

Batch Size:批量请求限流

Options → Batch Size 中设置每批次处理的 items 数量,配合 Wait Between Batches 控制 API 调用速率,避免触发限速(Rate Limit):

Batch Size: 5          # 每批处理 5 条
Wait Between Batches: 1000  # 批次间等待 1 秒(1000ms)

Timeout 和重试

Options 中配置:

忽略 SSL 证书错误

对于使用自签名证书的内部服务,在 Options → Allow Unauthorized Certs 中启用(不推荐用于公网服务)。

响应头访问

通过 $response.headers 访问响应头信息,常用于:

常见错误排查

错误 原因 解决方案
401 Unauthorized API Key 错误或缺失 检查 Authorization Header 配置
403 Forbidden 权限不足 检查 API Key 的权限范围
404 Not Found URL 路径错误 检查 API 文档,确认端点地址
429 Too Many Requests 触发限速 启用 Batch Size + Wait,或升级 API 套餐
500 Internal Server Error 目标服务故障 开启重试,检查目标服务状态
ECONNREFUSED 服务不可达 检查网络连通性,确认端口开放

调试技巧: 在 HTTP Request 节点的 Settings 中开启 Full Response,可以在输出中同时看到状态码($json.statusCode)、响应头($json.headers)和响应体($json.body),方便调试非 2xx 响应。

本章评分
4.7  / 5  (52 评分)

💬 留言讨论