场景导入:别让 API 的“问号”难倒你
笔者在 N8N 大学见过太多新手了,大家往往能搞定 HTTP Request 节点的基本请求,却在“查询参数”(Query Parameters)这一关卡住了壳。明明 API 文档写得清清楚楚,为什么填进去就报 400 Bad Request?或者返回的数据总是不全?
说白了,手动拼接 URL 字符串既容易出错又难以维护。想象一下,你每天要手动把 https://api.example.com/search?q=n8n&page=1&sort=desc 这种长串复制粘贴进浏览器,一旦参数多了,漏个符号就是灾难。自动化的核心就是省心,学会正确配置 HTTP Request 节点的查询参数,能让你的流程既稳定又优雅。
核心实操:3 步搞定查询参数设置
在 n8n 中,HTTP Request 节点非常强大,但它的参数设置方式有讲究。很多初学者习惯直接把参数写在 URL 字段里,虽然可行,但不够“自动化”。笔者推荐使用节点自带的“Query Parameters”功能,这才是正道。
步骤一:选择请求模式,锁定基础 URL
首先,拖拽一个 HTTP Request 节点到画布。在 URL 字段中,只填入基础地址,也就是去掉问号后面的部分。例如,如果你要调用 GitHub 的 API 获取用户信息,只需填入:https://api.github.com/users。
接着,在 Method 中选择通常的 GET。这一步的关键是保持 URL 的纯净,把动态参数留给后续步骤处理,这样逻辑更清晰。
步骤二:启用 Query Parameters 面板
这是最容易被忽略的一步。在 HTTP Request 节点的设置面板中,找到 Parameters 部分,点击下拉菜单或直接寻找 Query Parameters 选项(通常在 URL 输入框下方或右侧)。
点击“Add Parameter”(添加参数)。这里你会看到两栏:Name(参数名)和 Value(参数值)。例如,对于 ?q=n8n,Name 填 q,Value 填 n8n。
N8N 会自动帮你处理空格和特殊字符的 URL 编码(比如空格变成 %20),这是手动拼接字符串无法比拟的优势。
步骤三:使用表达式实现动态参数
静态参数谁都会填,自动化的精髓在于“动态”。假设你的流程上一步从 Webhook 接收到了用户输入的搜索关键词,存储在 {{ $('Webhook').item.json.search_term }} 中。
在 Query Parameters 的 Value 栏中,直接输入这个表达式。当流程运行时,n8n 会自动将表达式解析为实际值,并正确拼接到 URL 中。你可以添加多个参数,比如分页的 page 和 limit,构建出完整的请求链。
避坑指南:这些细节决定成败
虽然操作简单,但实战中仍有两个坑极易踩中:
1. 隐形的重复参数: 如果你在 URL 字段已经手动写了 ?page=1,又在 Query Parameters 面板添加了 page=2,n8n 会如何处理?通常它会尝试合并,但不同 API 对重复参数的处理逻辑不同(有的取第一个,有的取最后一个),这会导致难以排查的逻辑错误。切记:URL 字段只保留基础路径,参数全部交给面板处理。
2. 字符串与数字的陷阱: 虽然 URL 本质是字符串,但某些 API 对参数类型敏感。比如 page=1 和 page="1"。在 n8n 的表达式中,如果源数据是数字类型,n8n 会自动转换。但如果你手动输入 Value,建议用双引号包裹表达式以确保类型安全,例如使用 ="{{ $json.id }}" 而不是 {{ $json.id }},视 API 需求而定。
进阶技巧:处理复杂的参数结构
有时候,API 需要的参数结构比较特殊,比如数组或嵌套对象。以 Google Translate API 为例,它可能需要 target=zh&source=en&q=Hello&q=World 这种形式(同一个参数名出现多次)。
在 n8n 的 Query Parameters 面板中,你可以直接添加多行,Name 都填 q,Value 分别填 Hello 和 World。n8n 会自动将其序列化为正确的格式。这种处理方式比在代码中写循环拼接字符串要方便得多,也更符合低代码的开发逻辑。
FAQ 问答:你可能遇到的问题
Q1: 为什么我设置的参数在 URL 中看起来是乱码?
A: 这是正常的 URL 编码(Percent-encoding)。比如空格会被转义为 %20,中文字符也会被转码。这是为了保证 HTTP 协议的传输安全,无需手动干预,n8n 已经帮你处理好了。
Q2: GET 请求之外的其他方法(如 POST)需要设置 Query Parameters 吗?
A: 需要。HTTP 协议中,Query Parameters(问号后的参数)与请求体(Body)是两回事。即使是 POST 请求,URL 后面依然可以带参数(例如分页信息)。n8n 的 HTTP Request 节点在任何请求方法下都支持 Query Parameters 面板。
Q3: 如何在 Query Parameters 中传递 JSON 对象?
A: 大多数 API 不接受 Query Parameters 中直接传递 JSON 字符串,通常需要扁平化处理。如果 API 文档确实要求,你可以将 JSON 序列化为字符串后放入 Value 中,但更常见的做法是使用 Body 发送 POST/PUT 请求。请务必查阅具体 API 的文档。
总结与资源
掌握 HTTP Request 节点的查询参数设置,是 n8n 开发中从“能用”到“好用”的关键一步。核心原则就是:URL 留空基础路径,参数全部交给 Query Parameters 面板,善用表达式实现动态化。
如果你在调试过程中遇到棘手的 API 接口问题,欢迎访问 N8N大学 (n8ndx.com) 查阅更多实战案例。低代码开发的路上,我们陪你一起避坑,让自动化真正为你所用。