proxy - Node.js 中的 Google GAX/gRPC 不支持 HTTP/S 代理

标签 proxy dialogflow-es grpc grpc-node

我正在尝试让 Google 的 Dialogflow v2 Node.js SDK 中的 Dialogflow SDK 示例正常工作。我正在使用 node.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" 运行节点的 shell 中设置了环境变量,并尝试再次运行示例,但出现了同样的问题。请注意,我的 $http_proxy$https_proxy 变量是相同的。

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

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

最佳答案

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

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

关于proxy - Node.js 中的 Google GAX/gRPC 不支持 HTTP/S 代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51479697/

相关文章:

Java-grpc 和 tikv-java : NoSuchFieldError: CONTEXT_SPAN_KEY

apache - 如何通过 Apache 代理服务第二个子域

visual-studio-code - 使用远程 ssh 扩展时,VSCode 无法安装扩展远程 ssh 服务器

heroku - Proximo heroku 插件在 https 请求上超时

swift - DialoguFlow 网络请求在 Swift 中不起作用

android - gRPC 客户端 : error in compiled file (io. grpc.protobuf 不存在)

docker - 建立grpc protobuf需要太长时间

Python - Selenium 取消代理使用

dialogflow-es - outputContexts有时不会出现在queryResult中

javascript - DialogFlow v2 访问 token 无法生成