Google GAX / gRPC в Node.js не работает с HTTP/S-прокси
Я пытаюсь получить образцы Dialogflow SDK из Google Dialogflow v2 Node.js 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 Хотя-a-proxy-fe46658b5f2a, который выглядел очень ориентированным на Java, но предполагал, что переменная окружения GRPC_PROXY_EXP
быть установлен для того, чтобы заставить вызовы gRPC работать за прокси. Я установил переменную среды в оболочке, из которой я запускал узел с export GRPC_PROXY_EXP="$https_proxy"
и попытался запустить образец снова, с той же проблемой. Обратите внимание, что мой $http_proxy
, $https_proxy
переменные одинаковы.
Тот же самый пример работает с той же машины, когда подключен к сети Wi-Fi без прокси; и tcpdump
Анализ пакетов показывает, что используются два TCP-соединения (разные порты): одно работает (и открывается первым), а другое - нет, и обнаруживает ошибку с прокси. Второе соединение немедленно начинает CLIENT_HELLO
Сообщение TLS, когда ему необходимо сначала пройти проверку подлинности и отправить HTTPS-прокси CONNECT
сообщение (как и первое TCP-соединение).
Я что-то упустил или это проблема с библиотекой узлов dialogflow (google-gax / grpc)?
0 ответов
После нескольких дискуссий на нескольких досках обсуждения вопросов проекта узла Google выяснилось, что проблема заключалась в том, что при использовании HTTPS через HTTP-туннелирование gtoken
Прямое использование API axios
Пакет npm был подготовлен только для использования HTTPS (в соответствии с протоколом в URL-адресе).
Короче говоря; Dialogflow 0.8.2
содержит исправление этой проблемы, поскольку его транзитивные зависимости включают версию gtoken
пакет, который использует gaxios
вместо того axios
. gaxios
это пакет, который используется где-нибудь в google-gax
библиотека для создания соединений HTTP/S (которая поддерживает прокси и обрабатывает вариант использования HTTPS поверх HTTP).