同一 百度云存储 URL, Python 请求成功、浏览器访问成功,唯独 Node.js fetch 失败

6 月 17 日
 yeekal

背景:百度新出的 paddle ocr vl 1.6 ,根据其 api 文档( python 写的),在测试时会返回一个结果链接,请求该链接获取其中的 json 结果

该链接 python requests 可以访问,本地 curl 可以访问,浏览器可以直接访问,但是在 nextjs 项目里面前后端通过 fetch 均无法访问

链接示例: https://paddleocr-store-1.bj.bcebos.com/v1/job/b2e41a29bdef834cf1786aa41d950cdf232126f264bb994fbf98bb1eae787492/json/cc48ad7a5e6ebb092bfe10bd2619859c.json?authorization=bce-auth-v1%2FALTAKDN8mY5KlNI7zaRpLmOqrw%2F2026-06-17T07%3A28%3A33Z%2F604800%2F%2Fac27632bf11a36d6cd2f12b791dbb8015330f430ec39e4925a4d396691c88e94

我让 deepseek 写一个单页 html(排除任何框架干扰),试图访问该链接也不行,并排除了 CORS (跨域资源共享)问题。

其中有一个可能性是“Node.js v18/v20/v22 中的 Happy Eyeballs 机制存在已知实现缺陷,导致连接超时问题”,但是我没找到靠谱的修复方案

有没有大佬遇到过类似问题

1533 次点击
所在节点    问与答
9 条回复
nomansky
6 月 17 日
把你 request/response 打印或抓包对比下不就好了
yeekal
6 月 17 日
@nomansky 对比 python 和 fetch 的么
dislazy2023
6 月 17 日
一般是文件名的特殊字符 让 ai 处理一下
dislazy2023
6 月 17 日
不过这也不太像
mqnu00
6 月 17 日

node fetch 没问题啊
mqnu00
6 月 17 日
@mqnu00 #5

node v22.15.0
QHKZ
6 月 17 日
如果 curl 没问题说明接口是正常的,那么肯定是代码有问题,最好在代码发送请求的时候打断点,看看到底发了什么请求出去,有时候一些第三方库的写法不一样结果也会不一样
yeekal
6 月 17 日
@mqnu00 我用你这个版本试一下
yeekal
6 月 17 日
@mqnu00 换版本也不行。最后通过改为 https 模块解决了。 猜测跟网络环境也有关系。

ai 给出的原因和解决办法:

```text
问题在于 Node.js 自带的 fetch (使用 undici )与该特定主机的连接存在超时问题。而原生 https 模块在显式强制使用 IPv4 并指定 IP 地址时可以正常工作。

根本原因:undici ( Node 的 fetch 后端)无法与 paddleocr-store-7.bj.bcebos.com 建立 TCP 连接(可能是 IPv6/TLS 握手问题),而 curl 和 Python requests 则能正常处理。

修复方案:使用原生 https 模块,并显式进行 IPv4 查询。
```

感谢各位

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1221126

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX