> For the complete documentation index, see [llms.txt](https://doc.duaer.com/zh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.duaer.com/zh/integrations/builtin/core-nodes/duaer-nodes-base.httprequest/common-issues.md).

# Duaer 里 HTTP Request 的常见问题

Duaer 里 HTTP Request 常见报错的原因和修法：400、404、403、429、连接被拒、JSON 无效和文件上传。
## Bad request - please check your parameters <a href="#bad-request-please-check-your-parameters" id="bad-request-please-check-your-parameters"></a>

对方返回 400 时，Duaer 的 HTTP Request 显示这条报错。常见原因：

- Query Parameters 里的名称或值不被对方接受。
- 传了数组，但格式和对方要求的不一致。在 Options 里改 Array Format in Query Parameters。

对照对方 API 文档核对参数的写法。

## The resource you are requesting could not be found <a href="#the-resource-you-are-requesting-could-not-be-found" id="the-resource-you-are-requesting-could-not-be-found"></a>

对方返回 404：URL 写错，或这个接口已经下线。对照对方 API 文档确认路径和版本号。

## Forbidden - perhaps check your credentials? <a href="#forbidden-perhaps-check-your-credentials" id="forbidden-perhaps-check-your-credentials"></a>

对方返回 403，说明认证通过不了或权限不够。

- 给 API 密钥或账号补上这个操作需要的权限或 scope。
- 用通用凭证时，确认头名称和值的格式符合对方要求。
- 重新生成一把权限足够的密钥，更新到 Duaer 凭证里。

## 429 - The service is receiving too many requests from you <a href="#id-429-the-service-is-receiving-too-many-requests-from-you" id="id-429-the-service-is-receiving-too-many-requests-from-you"></a>

对方限流了。用 HTTP Request 自带的两种办法放慢请求：

1. Options › Batching：Items per Batch 设每批条数，Batch Interval (ms) 设批与批之间的等待。每秒一次就填 1000。
2. 节点设置里打开「失败时重试」，设「最大尝试次数」和「重试等待时长（毫秒）」。

## Connection refused (ECONNREFUSED) <a href="#connection-refused-econnrefused" id="connection-refused-econnrefused"></a>

Duaer 能找到那台主机，但目标端口没有程序在监听。这不是域名解析失败，也不是超时。

自托管 Duaer 跑在 Docker 里时，最常见的原因是容器网络：容器里的 localhost 和 127.0.0.1 指的是 Duaer 容器自己，不是宿主机。

- 目标在宿主机上，Docker Desktop（Mac、Windows）：URL 写 http://host.docker.internal:<端口>。
- 目标在宿主机上，Linux：给容器加 --add-host=host.docker.internal:host-gateway，或在 docker-compose.yml 的 extra_hosts 里加同样一行。
- 目标是同一个 Compose 里的另一个容器：用服务名当主机名，例如 http://my-api:5000，端口写容器内部端口。
- 不在 Docker 里也连不上 localhost：改写 http://127.0.0.1:<端口>。localhost 可能先解析成 IPv6 的 ::1，而目标只监听 IPv4。

Duaer 云上的数字组织在 Duaer 的服务器上运行，访问不到你电脑上的服务。本机服务要先通过隧道暴露成公网地址。

## The value in the "…" field is not valid JSON <a href="#json-parameter-not-valid" id="json-parameter-not-valid"></a>

你选择用 JSON 传参数，但引号里的字段内容不是合法 JSON。

- 先用 JSON 校验工具找出缺引号、多余或缺少逗号、括号不配对等问题。
- 用表达式时，把整段 JSON 放进一对 {{ }} 里，例如 {{ { "name": $json.name } }}。

## 上传的文件名不对 <a href="#your-uploaded-file-arrives-with-the-wrong-file-name" id="your-uploaded-file-arrives-with-the-wrong-file-name"></a>

Body Content Type 选 Form-Data 发文件时，Duaer 用二进制数据自带的文件名，Name 只是表单字段名。二进制数据没有文件名时，发出去的是 file。对方按文件名识别上传时，可能报 400「缺少文件」。

在 HTTP Request 之前设好文件名：Convert to File 节点里设 File Name；或者在 Code 节点里写 item.binary.data.fileName = 'index.html'。对方检查类型时，也要把 MIME 类型设对。

## 发文件时报 415 Unsupported media type <a href="#unsupported-media-type-415-when-you-send-a-file" id="unsupported-media-type-415-when-you-send-a-file"></a>

Body Content Type 选 Duaer Binary File 时，整个请求体就是这个文件，没有 multipart 外壳。只收 multipart 的接口会拒绝。改成 multipart：

1. Body Content Type 选 Form-Data。
2. 加一条 Body Parameters，Type 选 Duaer Binary File。
3. Name 填对方文档里的表单字段名。
4. Input Data Field Name 填存放文件的二进制属性，例如 data。
## Questions

### Duaer 的 HTTP Request 报 429 怎么办？

在 Duaer 的 HTTP Request 里打开 Options › Batching 放慢请求，或在节点设置里打开「失败时重试」并设等待时长。

### Duaer 云上的 HTTP Request 能访问我电脑上的 localhost 吗？

不能。Duaer 云上的数字组织在 Duaer 服务器上运行。先用隧道把本机服务暴露成公网地址。

