Попытка выполнить 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.
У меня такая же проблема с запросом 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 в этой ситуации работают хорошо.
Я и мой коллега определили проблему, скоро должен быть пиар
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 Моим исправлением легко пользоваться:
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
Жду слияния тоже. Почему так долго?
Я не могу решить это в 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
.
Самый полезный комментарий
Недавно была аналогичная проблема, мое решение заключалось в использовании туннеля HTTPS-over-HTTP, явном указании порта 443 в URL-адресе и отключении автоматического обнаружения прокси в axios:
Подробнее о решении в этой статье .
Надеюсь это поможет,
Янв