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

时间:2018-07-23 13:13:21

标签: proxy dialogflow grpc grpc-node

我正在尝试从Google的Dialogflow v2 Node.js SDK中获取Dialogflow SDK示例。我使用的是nodeflow.js v8.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调用在代理后面工作。我在使用export GRPC_PROXY_EXP="$https_proxy"运行节点的外壳程序中设置了环境变量,并尝试再次运行该示例,但存在相同的问题。请注意,我的$http_proxy$https_proxy变量是相同的。

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

我是否缺少某些东西,或者这是dialogflow(google-gax / grpc)节点库的问题?

1 个答案:

答案 0 :(得分:0)

在几个Google节点项目问题讨论板上反复进行讨论后,结果发现,问题是-使用HTTPS over HTTP隧道时,gtoken API直接使用{{ 1}} npm软件包仅准备使用HTTPS(与URL中的协议一致)。

简而言之: axios包含此问题的修复程序,因为其传递依赖项包括使用Dialogflow 0.8.2而非gtoken的{​​{1}}软件包的版本。 gaxiosaxios库中其他地方用来建立HTTP / S连接的软件包(它可以识别代理,并处理HTTP用例上的HTTPS)。