Google Node.js 中的 GAX / gRPC 不适用于 HTTP/S 代理

Google GAX / gRPC in Node.js Does Not Work With HTTP/S Proxy

我正在尝试从 Google 的 Dialogflow v2 Node.js SDK 获取 Dialogflow SDK 示例以使其工作。我正在使用 node.js v8.10.0,dialogflow node.js SDK 版本 0.5.0。我在尝试从公司 http/s 代理 :

后面 运行 "Detect Intent" 样本 时遇到这个问题
Auth error:Error: write EPROTO 140163148314432:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:827

我在这里遇到了这个 post:https://medium.com/google-cloud/accessing-google-cloud-apis-though-a-proxy-fe46658b5f2a 看起来非常 java 导向,但它建议设置环境变量 GRPC_PROXY_EXP 以获得gRPC 调用在代理后面工作。我在 shell 中设置了环境变量,我从中 运行ning 节点与 export GRPC_PROXY_EXP="$https_proxy" 并尝试再次 运行 样本,但出现了同样的问题。请注意,我的 $http_proxy$https_proxy 变量是相同的。

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

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

在几个 Google 节点项目问题讨论板上 back-and-forth 之后,问题原来是 - 当使用 HTTPS over HTTP 隧道时 - gtoken API直接使用axios npm包只是准备使用HTTPS(与URL中的协议一致)。

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