Google GAX/gRPC в Node.js не работает с прокси-сервером HTTP/S

Я пытаюсь заставить работать образцы Dialogflow SDK из Google Dialogflow v2 Node.js SDK. Я использую node.js v8.10.0 с пакетом SDK для диалогового потока node.js версии 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 одинаковы.

Тот же образец работает с той же машины при подключении к сети Wi-Fi без прокси; а анализ пакетов tcpdump показывает, что используются два TCP-соединения (разные порты): одно работает (и открывается первым), а другое не работает и обнаруживает ошибку с прокси-сервером. Второе соединение немедленно начинает сообщение CLIENT_HELLO TLS, когда ему необходимо сначала пройти аутентификацию и отправить прокси-серверу HTTPS сообщение CONNECT (как это делает первое соединение TCP).

Я что-то упустил, или это проблема с библиотекой узлов диалогового потока (google-gax / grpc)?


person mephicidex    schedule 23.07.2018    source источник


Ответы (1)


После некоторого обмена мнениями на нескольких дискуссионных форумах по проблемам проектов узлов Google проблема оказалась в том, что — когда используется туннелирование HTTPS через HTTP — прямое использование gtoken API пакета axios npm было подготовлено только для использования HTTPS. (в соответствии с протоколом в URL).

Короче говоря; Dialogflow 0.8.2 содержит исправление этой проблемы, поскольку его транзитивные зависимости включают версию пакета gtoken, в которой используется gaxios вместо axios. gaxios — это пакет, используемый в другом месте в библиотеке google-gax для создания HTTP/S-соединений (который поддерживает прокси-сервер и обрабатывает вариант использования HTTPS через HTTP).

person mephicidex    schedule 10.07.2019
comment
Как включить правильную версию диалогового потока в зависимости nodejs? Вот мои зависимости (и я столкнулся с проблемой): действия в Google: ^ 2.12.0, выполнение диалогового потока: ^ 0.6.1 - person Manuela; 17.10.2019
comment
диалоговый поток: 0.8.2 - person mephicidex; 18.10.2019
comment
Спасибо, но сейчас я не использую диалоговый поток, я использую диалоговый поток-выполнение. - person Manuela; 24.10.2019