Axios: Запрос на HTTPS с HTTP-прокси не выполняется

Созданный на 30 мая 2017  ·  52Комментарии  ·  Источник: axios/axios

Резюме

Попытка выполнить HTTPS-запрос через HTTP-прокси не удалась.

const req = await axios({
  url: 'https://somedomain.com',
  proxy: {
    host: '89.151.146.7',
    port: 6060,
    auth: {
      username: 'myname',
      password: 'mypass',
    },
  },
});

Результаты в:

Error: write EPROTO 140736379442112:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:794

Проблема уже описана @chovy в этом https://github.com/mzabriskie/axios/issues/662

@chovy говорит:

У меня все еще есть эта проблема, когда я не могу попасть по URL-адресу https с помощью http-прокси. Я могу сделать это нормально в запросе, а также в завитке из оболочки. Что-то не работает с аксиомами. Я получаю ошибку EPROTO.

Контекст

  • версия axios: v0.16.1
  • Среда: узел v7.10.0, Mac OSX Sierra

Самый полезный комментарий

Недавно была аналогичная проблема, мое решение заключалось в использовании туннеля HTTPS-over-HTTP, явном указании порта 443 в URL-адресе и отключении автоматического обнаружения прокси в axios:

import axios, { AxiosInstance } from 'axios';
import * as tunnel from 'tunnel';

const tunnel = tunnel.httpsOverHttp({
    proxy: {
        host: 'proxy.mycorp.com',
        port: 8000,
    },
});

const httpClient: AxiosInstance = axios.create({
    baseURL: 'https://some.api.com:443',
    httpsAgent: tunnel,
    proxy: false,
});

Подробнее о решении в этой статье .

Надеюсь это поможет,
Янв

Все 52 Комментарий

У меня такая же проблема с запросом https через прокси. Я не хочу переходить на request.js.

return axios({ url: 'https://site.com', proxy: { host: 'proxy.xxxxxx.com', port: 3128 } })
Результат:
Error: write EPROTO 139800246822688:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:794

request.js и curl в этой ситуации работают хорошо.

Контекст

  • версия axios: v0.16.1
  • Среда: узел v6.9.5, выпуск CentOS 6.8 (окончательный)

Я и мой коллега определили проблему, скоро должен быть пиар

PR находится здесь https://github.com/mzabriskie/axios/pull/959

Такая же проблема здесь: запрос ресурсов https через прокси-сервер http.

axios.get('https://resources.json', {   
   proxy: {
      host: 'http://my.proxy.com',
      port: 12345
   }
})
   .then(() => {})
   .catch(() => {});

Результат:
Error: getaddrinfo ENOTFOUND http://my.proxy.com http://my.proxy.com:12345

Есть ли прогресс в этом вопросе?

Здесь та же проблема.

Любые новости ?

Моя проблема не была связана с прокси, но мне пришлось отправить запрос GET на домен https который не был сертифицирован. В curl внутри терминала Linux решение заключалось в использовании флага -k или --insecure . Я не смог найти решение Axios, но с request lib я сделал это так; может дать вам представление:

const agentOptions = {
    host: '10.100.0.10',
    port: '443',
    path: '/',
    rejectUnauthorized: false,
  }

const agent = new https.Agent(agentOptions)
request({
      url: 'https://10.100.0.10/myUncertifiedTargetUrl',
      method: 'GET',
      agent,
    }, (err, resp, body) => {
...

Не стесняйтесь использовать это, пока они не объединятся # 959.

То же самое, кстати, пиар @mistermoe работает нормально

@mistermoe Я только что ушел с работы, но

Я использую этот пакет: https://github.com/Yoctol/messaging-apis/tree/master/packages/messaging-api-messenger

И если я заменю «axios» на ваше, исчезнет следующая ошибка:
«Ошибка: запись EPROTO 139800246822688: ошибка: 140770FC : подпрограммы SSL протокол: ../ deps / openssl / openssl / ssl / s23_clnt.c : 794»

Но у меня есть что-то вроде:
"Ошибка: getaddrinfo EAI_AGAIN"

Я заметил, что плагин Messenger делает такие запросы:
`
пусть client = axios.create ({...});

client.get ('...')
`

Удалось ли вам таким путем или нет напрямую с помощью функции "запрос" Axios?

Спасибо!

РЕДАКТИРОВАТЬ: еще один, у которого есть эта проблема:
https://github.com/axios/axios/pull/959#issuecomment -337595602

Есть ли шанс слить это? Можем ли мы использовать недавно добавленный config.transport, чтобы избежать этой проблемы?

ИБП, здесь такая же проблема!

К сожалению, этот запрос на перенос не объединяется, но я исправил эту проблему https://github.com/Sitronik/axios

Недавно была аналогичная проблема, мое решение заключалось в использовании туннеля HTTPS-over-HTTP, явном указании порта 443 в URL-адресе и отключении автоматического обнаружения прокси в axios:

import axios, { AxiosInstance } from 'axios';
import * as tunnel from 'tunnel';

const tunnel = tunnel.httpsOverHttp({
    proxy: {
        host: 'proxy.mycorp.com',
        port: 8000,
    },
});

const httpClient: AxiosInstance = axios.create({
    baseURL: 'https://some.api.com:443',
    httpsAgent: tunnel,
    proxy: false,
});

Подробнее о решении в этой статье .

Надеюсь это поможет,
Янв

@ jan-molak Моим исправлением легко пользоваться:

  1. npm установить axios-https-proxy-fix
  2. потом
import axios from 'axios-https-proxy-fix'; 

const proxy = {
  host: 'some_ip',
  port: some_port_number,
  auth: {
    username: 'some_login',
    password: 'some_pass'
  }
};

async someMethod() {
  const result = await axios.get('some_https_link', {proxy});
}

Решение @ jan-molak тоже сработало для меня. Было бы действительно неплохо не указывать номер порта принудительно в URL-адресе.

@ jan-molak @Sitronik Я пробовал ваше решение, но получаю сообщение об ошибке: сокет повесил трубку.
Я хочу увидеть, как запрос проходит через charles, поэтому я открываю charles и устанавливаю прокси на {host: '127.0.0.1', порт: 8888 } в моем коде. Не знаю, подходит ли ваше решение

Есть ли шанс быть включенным в 0.19.0?

@astappev, похоже, это определенно нужно исправить как можно скорее. Есть много связанных проблем и PR, которые мне нужно проанализировать, но я добавлю это в свою дорожную карту 0.19.0.

@emilyemorehouse , как вы думаете, когда он выйдет?
PR # 959 решает критическую часть проблемы, другие проблемы, такие как проксирование перенаправления, и поэтому могут быть улучшены позже. Изменения в # 959 довольно просты и могут быть опубликованы всего за несколько минут.

@Sitronik, который у меня работает, спасибо

Исправление @ jan-molak спасло мне день.
+1 к объединению PR.

Еще один +1 к слиянию этого !!

Та же проблема ... пожалуйста, слейте!

Такая же проблема здесь

@Sitronik, который у меня работает, спасибо - пожалуйста,
Однако настройки прокси, похоже, не читаются из переменных среды (http_proxy / https_proxy), но должны быть указаны как часть AxiosRequestConfig.

+1 Все еще использую упомянутые выше обходные пути, но хотелось бы увидеть эту работу прямо из коробки.

+1 Когда это исправишь? Но нам тоже нужен no_proxy ...

@Sitronik добавьте PR. Ваш пакет axios-https-proxy-fix работает нормально. axios.defaults.proxy = {host: ip, port: port}

Все еще проблема, будет ли использовать этот пакет, но многие из них не выполняются? Это не проблема: S

использовал бы этот пакет, но его много коммитов позади?

То же самое для меня, пока я жду этого изменения, я собираюсь использовать node-fetch + httpsProxyAgent + bluebird. Работает отлично.

@Makoehle

Привет, я заставил его работать, попробуйте экспортировать http и https в "" на вашем терминале

export http_proxy="" && export https_proxy=""

Спасибо, я знаю о переменных env. Все перепробовала. Я предполагаю, что это связано с №1207

Жду слияния тоже. Почему так долго?

959 был объединен и доступен в версии 0.19.0-beta.1.

Я не могу решить это в 0.19.0-beta.1, но я исправил вот так

// default axios usage
import * as ProxyAgent from "proxy-agent";
const proxyAgent = new ProxyAgent(process.env.HTTPS_PROXY);  // http://127.0.0.1:1080
Axios.defaults.httpsAgent = proxyAgent;
Axios.defaults.proxy = false;

// google api usage
const Sheets = google.sheets({
    version: "v4",
    auth: key,
    httpsAgent: /dev/.test(process.env.NODE_ENV) ? proxyAgent : false,
    proxy: false
});

0.19.0-beta.1 должен исправить проблему, я закрываю проблему и не стесняйтесь создавать новую, если у кого-то все еще есть проблема

@Khaledgarbaya У меня все еще проблема с 0.19.0-beta.1
У меня вопрос: как должен выглядеть мой прокси-запрос (и как работает флаг isHttps?).

Я предположил, что для HTTPS через HTTP я бы просто установил http url / порт для прокси следующим образом:

axiosRequestOptions.proxy = {
            host: '192.0.01',
            port: '8888',
            // isHttps: true, ?
        }

При этом вышесказанное по-прежнему не работает, поэтому мне интересно, является ли это проблемой конфигурации / документации, в которой причиной является мое структурирование свойства / объекта прокси.

@necevil
хост: '192.0.01'

0.19.0-beta.1 по-прежнему не работает. Я продолжал получать Request failed with status code 400 . Потратил на это много времени. Переключился на библиотеку запросов, и с первой попытки все заработало отлично.

Столкнулся с той же проблемой.

const axios = require('axios-https-proxy-fix')

исправил проблему для меня.

После обновления до 0.18.0 это, похоже, работает для меня. Однако мне пришлось указать следующие параметры для моего варианта использования:

axios.get('<some_url_on_corporate_intranet>', {
        proxy: false,
        httpsAgent: https.Agent({
            rejectUnauthorized: false // Allows the use of self-signed certificates (not recommended)
    })

пробовал все решения и всю неудачную базу на axios 0.18
окончательное решение :
установить модуль nginx ngx_http_proxy_connect_module
затем запросите URL-адрес https через HTTP-прокси с запросом-обещанием

Вам не нужен Nginx, если вы используете request. Запрос обработанных прокси нормально.

-
Энтони

17 января 2019 г. в 20:44 redbearder [email protected] написал:

пробовал все решения и всю неудачную базу на axios 0.18
окончательное решение :
установить модуль nginx ngx_http_proxy_connect_module
затем запросите URL-адрес https через HTTP-прокси с запросом-обещанием

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите обсуждение.

Вам не нужен Nginx, если вы используете request. Запрос обработанных прокси нормально. - Энтони

17 января 2019 г., в 20:44, redbearder @ . * > писал: перепробовал все решения и всю неудачную базу на axios 0.18. Окончательное решение: установите модуль nginx ngx_http_proxy_connect_module, затем запросите URL-адрес https через HTTP-прокси с помощью запроса-обещания - вы получаете это, потому что вас упомянули. Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите обсуждение.

Спасибо за ответ
Я предполагаю, что люди будут отправлять запросы через один IP-адрес в качестве прокси-шлюза, это то, что я буду делать.
Однако запрос-обещание перехватывает ошибку «RequestError: Ошибка: туннельный сокет не может быть установлен, код 400».
поэтому я не нахожу решения от узла, а затем пытаюсь исправить его со стороны шлюза
и решение выходит выше

Спустя 2 года все еще битая !!!

Используйте обещание запроса.

Энтони
http://profullstack.com

18 июля 2019 г. в 7:05 Яссьен [email protected] написал:

Спустя 2 года все еще битая !!!

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub или отключите обсуждение.

Вот что я сделал для тех, кто наткнулся на это и все еще хочет использовать аксиомы:

const HttpsProxyAgent = require("https-proxy-agent"),
      axios = require("axios");

const httpsAgent = new HttpsProxyAgent({host: "proxyhost", port: "proxyport", auth: "username:password"})

//use axios as you normally would, but specify httpsAgent in the config
axios = axios.create({httpsAgent});

Это позволит вам делать https-запросы через http-прокси, просто и аккуратно.

По-прежнему возникает та же проблема через 2 года.
Кто-то работает над этим, или мы можем присоединиться, чтобы внести свой вклад?

Просто столкнулся с этой проблемой сам. Надеюсь, вы, ребята, когда-нибудь это исправите.
Решение czl032405 с использованием proxy-agent сработало для меня.

В версии 0.19.0 это исправлено. Поскольку это явно не так, следует открыть новый выпуск.

Эта функциональность все еще не работает в axios 0.19.
Версия 0.19.0 не работает с сообщением _ "Ошибка: протокол" http: "не поддерживается. Ожидается" https: "" _
Версия 0.19.1 выдает ошибку _ "Ошибка: превышено время ожидания 1000 мсек" _. Увеличение тайм-аута не помогает. Прокси-сервер ожидает запроса CONNECT то время как axios отправляет запрос GET .

Была ли эта страница полезной?
0 / 5 - 0 рейтинги