Appearance
HTTP 请求节点
HTTP 请求节点用于在工作流中调用 HTTP/HTTPS 接口,把上游变量组装成 URL、查询参数、请求头、鉴权信息和请求体,并将响应正文、状态码和响应头交给下游节点。
它适合调用 REST API、Webhook、模型或业务服务,但不是浏览器:不会执行网页脚本,也不能代替需要登录页面交互的自动化工具。
配置要点
| 项目 | 规则 |
|---|---|
| 请求方法 | 支持 GET、POST、PUT、DELETE、PATCH、HEAD。PATCH 通常用于部分更新。 |
| 超时与重试 | 默认超时 120 秒、最长 3600 秒;默认不重试,可选择 1~3 次。 |
| 请求体 | 支持 none、JSON、form-data、x-www-form-urlencoded、raw text、binary。 |
| 私网访问 | 默认禁止 localhost、回环地址和私网 IP。 |
| 输出 | 固定输出 body、statusCode、headers;body 和 headers 均为字符串。 |
接口地址、鉴权方式和字段结构必须以被调用服务的接口契约为准。
适用场景
- 获取外部服务数据,例如查询天气、订单或设备状态。
- 向业务系统提交表单或 JSON 数据。
- 更新或删除远端资源。
- 调用只提供 HTTP API、尚未封装成插件的服务。
- 向 Webhook 发送工作流结果或事件通知。
如果同一服务会被多个工作流长期复用,并且需要统一版本、鉴权、参数说明和权限管理,优先把它封装为插件,再通过插件节点调用。
节点配置
API
| 配置 | 说明 |
|---|---|
| 请求方法 | 支持 GET、POST、PUT、DELETE、PATCH、HEAD |
| URL | 必填,只允许 HTTP 或 HTTPS;可以输入 {{ 引用工作流变量 |
| URL 长度 | 当前前端校验要求小于 10000 个字符 |
当前运行时对 GET 和 HEAD 不发送请求体。即使界面中残留了 Body 配置,运行时也会忽略,因此查询条件应放到 URL 或“请求参数”中。

请求参数
请求参数会作为 Query 参数追加到 URL。每项包含参数名和参数值,参数值可以填写常量,也可以引用上游变量。
当前校验规则:
- 参数名只能包含字母、数字、中横线或下划线。
- 参数名必须以字母或下划线开头。
- 同一组参数名不能重复。
- 变量引用必须指向有效的上游输出。
例如,参数 locale=zh-CN 会形成类似 ?locale=zh-CN 的查询字符串。涉及数组、对象或特殊编码规则时,应先确认目标接口如何接收,再决定是否在上游转换为字符串。
请求头
请求头用于传递内容协商、租户标识、链路标识或接口要求的其他元数据,例如:
text
Accept: application/json
X-Request-Id: {{request_id}}请求头名称使用与请求参数相同的命名校验。不要在普通文本中写入真实 Token;优先引用由上游安全来源提供的变量。
鉴权
关闭鉴权时,节点不会自动添加认证信息。开启后支持两种方式:
| 类型 | 配置 | 发送方式 |
|---|---|---|
| Bearer Token | token | 自动生成 Authorization: Bearer <token> 请求头 |
| 自定义 | Key、Value、添加到 | 把自定义键值添加到 Header 或 Query |
Bearer Token 输入框只填写 Token 本身,不要重复输入 Bearer 前缀。自定义鉴权适合 API Key、签名字段或目标接口规定的其他认证参数。
鉴权已开启但值为空时,工作流发布校验会提示补全认证参数。Token、签名和密钥不应出现在 URL、截图、日志说明或提交到 Git 的文档中。
请求体
| 类型 | 使用场景 | 当前行为 |
|---|---|---|
| none | GET、HEAD 或不需要 Body 的接口 | 不发送请求体 |
| JSON | application/json 接口 | 发送编辑器中的 JSON 文本,并支持变量插值 |
| form-data | multipart 表单 | 当前执行器把配置项组装为 multipart 文本字段 |
| x-www-form-urlencoded | URL 编码表单 | 对字段名和值编码后发送 |
| raw text | 纯文本、XML 或目标接口要求的自定义文本 | 以 text/plain 发送文本 |
| binary | 单文件或二进制内容 | 使用文件变量中的 URL 或 Base64 内容发送 |
JSON 请求体必须在变量替换前后都能形成合法 JSON。例如字符串变量应放在 JSON 字符串位置:
json
{
"message": "{{input}}"
}不要在 JSON 字符串外额外拼接未经转义的文本。需要发送结构复杂的对象时,可先使用 JSON 序列化节点 生成严格 JSON,再按接口要求引用。
虽然 form-data 编辑器允许选择多种文件类变量类型,但当前运行执行器只组装 multipart 文本字段,不会把这些字段自动转换为真实文件附件。发送单个文件内容时使用 binary;需要多个文件或复杂 multipart 文件上传时,建议封装成专用插件。
binary 支持从文件变量中读取 URL 或 Base64 内容。使用 URL 时,运行时会先下载文件再作为请求体发送,同样受 HTTP/HTTPS 和私网地址限制。
输出
默认输出固定为:
| 输出 | 类型 | 说明 |
|---|---|---|
body | String | 响应正文原文 |
statusCode | Integer | HTTP 状态码 |
headers | String | 序列化后的响应头 JSON 字符串 |
当异常处理方式不是“中断流程”时,编辑器还会加入 errorBody,其中包含 errorMessage 和 errorCode,供异常分支或后续判断使用。
即使接口返回 application/json,body 仍然是字符串。需要引用 body.data.id 等内部字段时,应在下游接 JSON 反序列化节点,先将响应正文转换为结构化变量。
超时、重试和异常处理

| 配置 | 当前默认值 | 说明 |
|---|---|---|
| 整体执行超时 | 120 秒 | 最长 3600 秒;超过限制后按节点异常处理 |
| 重试次数 | 不重试 | 可选重试 1、2 或 3 次 |
| 异常处理方式 | 中断流程 | 还可选择“返回设定内容”或“执行异常流程” |
重试不是越多越好:
- GET、HEAD 等只读请求通常更适合重试,但仍要考虑目标服务限流。
- POST、PATCH、PUT、DELETE 可能产生副作用;只有目标接口提供幂等键或明确保证幂等时才应自动重试。
- 认证失败、参数错误等 4xx 问题通常无法通过重试解决。
- 超时不代表目标服务一定没有完成操作。写接口超时后盲目重试,可能创建重复数据。
导入 cURL
点击 API 区域右上角的“导入 cURL”,可以把常见 cURL 命令转换为节点配置。

当前导入器会解析:
- URL 和 GET 请求中的查询参数。
-X或--request指定的方法。-H或--header请求头。- JSON、URL 编码表单、form-data 和 raw text 请求体。
--data、--data-raw、--data-binary、--data-urlencode等常见参数形式。
导入完成后仍需逐项核对:
Content-Type会用于判断 Body 类型,并从普通请求头列表中移除。- 导入器只支持当前节点已有的六种请求方法。
- 复杂 shell 变量、命令替换、证书、代理、Cookie 文件等 cURL 行为不会完整迁移。
application/octet-stream的 cURL 当前不会自动生成 binary 文件变量;二进制请求应在导入后手动选择binary并绑定文件。- 不要把含真实密钥、Cookie 或 Token 的 cURL 放进文档截图。
网络与安全限制
当前运行时具有以下边界:
- 只允许
http://和https://URL。 - 默认阻止
localhost、回环地址、链路本地地址和私网 IP。 - 是否允许访问私网由工作流运行服务的安全配置决定,不能靠更换写法绕过。
- HTTP 客户端连接超时为 5 秒;节点整体执行超时由异常处理中的超时设置控制。
- binary URL 下载也执行同样的协议和私网校验。
如果必须调用企业内网服务,应由部署管理员配置可信的网络连通和安全策略,或将能力封装为受控插件。不要使用重定向、公共代理或硬编码地址规避限制。
配置示例
下面示例向一个 JSON 接口发送消息:
| 配置 | 示例值 |
|---|---|
| 方法 | POST |
| URL | https://httpbin.org/post |
| 请求参数 | locale = zh-CN |
| 请求头 | Accept = application/json |
| 请求体 | JSON:{"message":"AIOS 文档示例"} |
| 超时 | 120 秒 |
| 重试 | 不重试 |
httpbin.org 仅用于说明配置结构。实际工作流应替换为经过授权、可用性和数据合规评估的目标接口。
发布前检查
- URL 是否为允许访问的 HTTP/HTTPS 地址,变量引用是否有效。
- 请求方法是否与接口语义一致,GET/HEAD 是否误配了 Body。
- Query 和 Header 名称是否合法、无重复项。
- 鉴权是否开启,Token 是否只填写值而未重复添加
Bearer。 - JSON 是否严格合法,字符串变量是否位于引号内。
- 文件上传是否选择了适合当前实现的 binary 或专用插件。
- 写接口是否具备幂等条件,再决定是否开启重试。
- 是否同时检查
statusCode和业务响应字段。 - 响应正文是否需要 JSON 反序列化后再供下游使用。
- 试运行输入是否使用测试数据,且截图和日志中没有敏感信息。
常见问题
为什么配置了请求体,但 GET 或 HEAD 没有发送?
当前运行时对 GET 和 HEAD 固定忽略请求体。请把查询字段放在请求参数中,或根据目标接口改用 POST 等允许 Body 的方法。
为什么响应 JSON 不能直接引用内部字段?
HTTP 节点的 body 类型是 String。将 body 传给 JSON 反序列化节点,声明需要的输出结构后再引用内部字段。
为什么提示“JSON 语法错误”?
请求体在变量占位符替换后仍必须是合法 JSON。重点检查双引号、逗号、转义字符,以及字符串变量是否放在 JSON 字符串位置。
为什么访问 localhost 或内网 IP 失败?
工作流运行在服务端,不是在当前浏览器或个人电脑上执行,并且当前安全策略默认拦截私网和回环地址。请使用可从运行环境访问的正式服务,或联系部署管理员配置受控内网访问。
为什么 form-data 中选择文件变量后没有变成文件附件?
当前 form-data 执行路径只生成文本字段。单文件内容使用 binary;多个文件或复杂 multipart 请求应封装为插件。
为什么 cURL 导入后缺少 Content-Type?
导入器会用 Content-Type 判断 Body 类型,并由运行时按 Body 类型重新生成对应的内容类型,因此不会把它重复保留在普通请求头列表中。
为什么请求失败后没有重试?
当前默认值是“不重试”。需要时手动选择 1~3 次,并先确认目标接口是否幂等以及是否允许重复调用。
为什么 401 或 403 一直失败?
检查鉴权是否开启、Bearer Token 是否重复写了前缀、自定义鉴权添加到了正确的 Header 或 Query,以及当前凭证是否具备接口权限。认证和授权错误通常不应通过重试处理。