我正在尝试从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)节点库的问题?
答案 0 :(得分:0)
在几个Google节点项目问题讨论板上反复进行讨论后,结果发现,问题是-使用HTTPS over HTTP隧道时,gtoken
API直接使用{{ 1}} npm软件包仅准备使用HTTPS(与URL中的协议一致)。
简而言之: axios
包含此问题的修复程序,因为其传递依赖项包括使用Dialogflow 0.8.2
而非gtoken
的{{1}}软件包的版本。 gaxios
是axios
库中其他地方用来建立HTTP / S连接的软件包(它可以识别代理,并处理HTTP用例上的HTTPS)。