3

我正在尝试从 Google 的 Dialogflow v2 Node.js SDK 获取 Dialogflow SDK 示例来工作。我正在使用 node.jsv8.10.0和 dialogflow node.js SDK 版本0.5.0我在尝试从公司 http/s 代理后面运行“检测意图”示例时遇到了这个问题:

Auth error:Error: write EPROTO 140163148314432:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:827

我在这里看到了这篇文章:https ://medium.com/google-cloud/accessing-google-cloud-apis-though-a-proxy-fe46658b5f2a这似乎非常面向 Java,但它建议GRPC_PROXY_EXP设置环境变量为了让 gRPC 调用在代理后面工作。我在运行 node 的 shell 中设置了环境变量,export GRPC_PROXY_EXP="$https_proxy"并尝试再次运行示例,但问题相同。请注意,我的$http_proxy,$https_proxy变量是相同的。

当连接到没有代理的 wifi 网络时,相同的示例在同一台机器上工作;并且tcpdump数据包分析表明有两个 TCP 连接(不同的端口)正在使用中:一个有效(并且首先打开),另一个无效,并且遇到代理错误。第二个连接立即开始CLIENT_HELLOTLS 消息,当它需要首先验证并向 HTTPS 代理发送CONNECT消息时(与第一个 TCP 连接一样)。

我是否遗漏了什么,或者这是对话流(google-gax / grpc)节点库的问题?

4

1 回答 1

1

在几个谷歌节点项目问题讨论板上来回讨论之后,问题原来是 - 当使用 HTTPS over HTTP 隧道时 - gtokenAPI 直接使用axiosnpm 包只准备使用 HTTPS(一致使用 URL 中的协议)。

使长话短说; Dialogflow 0.8.2包含此问题的修复程序,因为它的传递依赖项包括gtoken使用gaxios而不是axios. gaxiosgoogle-gax库中其他地方用来建立 HTTP/S 连接的包(它是代理感知的,并通过 HTTP 用例处理 HTTPS)。

于 2019-07-10T19:20:20.800 回答