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 内置支持:
Predefined Credential Type:从 Credentials 系统选择已保存的凭证(推荐)Generic Credential Type:自定义 Header Auth、Basic Auth、Bearer Token 等None:无需认证的公开 API
Headers 配置
大多数 REST API 需要设置 Content-Type 和 Authorization:
{
"Content-Type": "application/json",
"Authorization": "Bearer {{ $vars.API_KEY }}",
"X-Custom-Header": "custom-value"
}
Body(请求体)配置
POST/PUT/PATCH 请求通常需要请求体:
- JSON:最常见,配合
Content-Type: application/json - Form Data:表单提交,使用
application/x-www-form-urlencoded - Multipart Form Data:文件上传
- Raw/Binary:发送原始字节流
Query Parameters(查询参数)
GET 请求的参数通过 Query Parameters 配置,n8n 自动进行 URL 编码:
page=1&limit=20&status=active&search={{ $json.keyword }}
响应处理
Response Format:
Automatic(默认):自动检测,JSON 自动解析,其他作为文本JSON:强制作为 JSON 解析Text:作为纯文本字符串File:作为二进制数据(下载文件时使用)
实战示例
示例一:调用 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 中配置:
- Timeout:请求超时时间(毫秒),默认 300000(5分钟)
- Retry On Fail:失败重试,建议对不稳定的外部 API 开启
忽略 SSL 证书错误
对于使用自签名证书的内部服务,在 Options → Allow Unauthorized Certs 中启用(不推荐用于公网服务)。
响应头访问
通过 $response.headers 访问响应头信息,常用于:
- 获取限速信息:
$response.headers['x-ratelimit-remaining'] - 获取下一页 URL:
$response.headers['link'] - 获取请求 ID:
$response.headers['x-request-id']
常见错误排查
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 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 响应。