国内 aws 机器。
原本是 python 代码,对 jina.ai 的 embedding API 接口发 reques 请求,请求是可以成功的。
但是换成 nodejs 后,用 fetch 或 axios 请求,总会 connect timeout 。
找不到解决办法,特来求助大佬们,谢谢

问题最后找到了,确实是系统环境变量导致的,我在 docker 里启动就没问题。
但我不知道是哪个环境变量影响的。也不知道本地调试时该如何避免变量影响。

跨域了

用 trycatch 包裹 axios 请求 打印出 error

后端 nodejs 请求,没有跨域一说

#2
Error: connect ETIMEDOUT xxxxx.xxx:443
at createConnectionError (node:net:1648:14)
at Timeout.internalConnectMultipleTimeout (node:net:1707:38)
at listOnTimeout (node:internal/timers:583:11)
at process.processTimers (node:internal/timers:519:7) {
errno: -110,
code: 'ETIMEDOUT',
syscall: 'connect',
address: 'xxx.xxx.xx',
port: 443

真的太诡异了,到底是哪里问题啊,python 请求百分百成功,一换 nodejs 就超时。。。。

盲猜是 proxy 的问题,你搜一下 axios 或者 fetch 的 proxy 相关设置,把你的本地的 proxy 配置手动配置一下。

在服务器上使用 curl 请求看看, 排除下是不是本地根证书问题

#6 没有任何 http 代理,python 和 nodejs 在同一个机器上。
#7
最后还是没解决,我单独写了一个 python ,只用于发 request 请求,然后 nodejs 请求这个 python 服务去调用 api 接口,,,,

我觉得是 nodejs 里的一些内置参数的问题,但是我没查出来

你本地也没开代理? jina.ai 不是海外的网站吗,因为有一些 http 代理可能是写到环境变量里面的,而 python 读了但是 nodejs 可能没读。

当然如果你也都排除了这个可能性,那就不好说了,要是能有复现的代码我们调试一下最好😁

可能是 node 版本问题,构建时使用的 ssl 库版本过低,使用高版本 node 试试

#10
#9
我怀疑是参数问题
jinaapi 原本的参数里,input 是一个数组 { "input": [... ]} ,我在数组里是 base64 的图片数据。
我用 python 做了代理后,在 nodejs 里用数组的这个形式发起请求后就会有问题,但是改成 input 单个对象请求就没问题了。

#11 忽略这个吧,我搞错了,不是这个问题。

你这个数组放哪传的,URL 参数还是 Body 还是用 multipart/form-data, 其他我就不知道了.

试试在 header 里添加 content-type (如果本来显式声明了的话就移除)

换语言大概率是发的东西不一样

删除掉 content type 可以了!!!真的是这个问题!!!感谢!!!

而且你这么一说就提醒我了,过去我也遇到过类似的问题,也是因为多写了 content type 导致的,这会没想起来这事。
但是我不知道为什么会有这个问题。。。。

而且这个问题诡异的是,请求还偶尔能成功一次。10 次里成功一次的样子

#16 以下内容我也不太确定,你参考一下吧。

前端使用 fetch 时浏览器会自动帮你加 content-type ,这时候不能显式设置 content-type 。

后端 node 的 fetch 貌似不会帮你加,所以需要你显式加。python 可以估计是 py 的请求包会自动帮你加。至于偶尔能成功一次,可能是你换了其他的请求库?

你需要的是这个: curlconverter.com/

#18 哎,错觉啊,没解决,,就偶发好了一下下,刚才一试又不行了。。。

🤣

问题最后找到了,确实是系统环境变量导致的,我在 docker 里启动就没问题。
但我不知道是哪个环境变量影响的。也不知道本地调试时该如何避免变量影响。

设置 useragent 为浏览器的值试试( navigator.userAgent )

process.env 看过了吗?有没有相关的?

像是 DNS 问题啊