A tentativa de fazer uma solicitação HTTPS com um proxy HTTP falha.
const req = await axios({
url: 'https://somedomain.com',
proxy: {
host: '89.151.146.7',
port: 6060,
auth: {
username: 'myname',
password: 'mypass',
},
},
});
Resulta em:
Error: write EPROTO 140736379442112:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:794
O problema já foi descrito por @chovy neste ticket, que acabou sendo fechado porque o OP não teve o mesmo problema: https://github.com/mzabriskie/axios/issues/662
@chovy diz:
Ainda tenho esse problema de não conseguir acessar um url https com um proxy http. Eu posso fazer isso bem no pedido e também no curl do shell. Algo não funciona com axios. Recebo um erro EPROTO.
Estou tendo o mesmo problema de solicitação de https sobre proxy. Não quero passar para request.js.
return axios({
url: 'https://site.com',
proxy: {
host: 'proxy.xxxxxx.com',
port: 3128
}
})
Resultado:
Error: write EPROTO 139800246822688:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../deps/openssl/openssl/ssl/s23_clnt.c:794
request.js e curl nesta situação funcionam bem.
Eu e um colega meu identificamos o problema, um PR deve chegar em breve
o PR está aqui https://github.com/mzabriskie/axios/pull/959
O mesmo problema aqui: Solicitar recursos https atrás de um proxy http.
axios.get('https://resources.json', {
proxy: {
host: 'http://my.proxy.com',
port: 12345
}
})
.then(() => {})
.catch(() => {});
Resultado:
Error: getaddrinfo ENOTFOUND http://my.proxy.com http://my.proxy.com:12345
Algum progresso nisso até agora?
Mesmo problema aqui.
Qualquer notícia ?
Meu problema não estava relacionado a proxies embora, eu tive que enviar uma solicitação GET para https
domínio que não era certificado. Em curl
dentro do terminal linux, a solução foi usar a bandeira -k
ou --insecure
. Não consegui encontrar a solução Axios embora, mas com request
lib eu fiz assim; pode te dar uma ideia:
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) => {
...
Sinta-se à vontade para usar isso até que eles tenham o # 959 mesclado.
O mesmo aqui, aliás , a RP de
@mistermoe Acabei de sair do trabalho sem fazer sucesso :(
Eu uso este pacote: https://github.com/Yoctol/messaging-apis/tree/master/packages/messaging-api-messenger
E se eu substituir "axios" pelo seu, o seguinte erro desaparece:
"Erro: escrever EPROTO 139800246822688: erro: 140770FC : Rotinas SSL protocolo desconhecido
Mas eu tenho algo como:
"Erro: getaddrinfo EAI_AGAIN"
Percebo que o plugin do Messenger faz solicitações como estas:
`
deixar cliente = axios.create ({...});
client.get ('...')
`
Você foi bem-sucedido desta forma ou não diretamente pela função de "solicitação" do Axios?
Obrigado!
EDIT: Outro com este problema:
https://github.com/axios/axios/pull/959#issuecomment -337595602
Alguma chance de mesclar isso? Podemos aproveitar o novo config.transport adicionado para evitar esse problema?
ups, mesmo problema aqui!
Infelizmente, essa solicitação de pull não foi mesclada, mas eu corrigi esse problema https://github.com/Sitronik/axios
Tive um problema semelhante recentemente, minha solução foi usar um túnel HTTPS sobre HTTP, especificar a porta 443 explicitamente no URL e desativar a detecção automática de proxy em 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,
});
Mais sobre a solução neste artigo .
Espero que isto ajude,
Jan
@ jan-molak Minha correção é fácil de usar:
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});
}
A solução de @jan-molak também funcionou para mim. No entanto, seria realmente bom não ter que forçar o número da porta no url.
@ jan-molak @Sitronik Tentei sua solução, mas obteve Erro: o soquete
O que eu quero é ver como a solicitação passa por charles, então eu abro charles e defino o proxy para {host: '127.0.0.1', porta: 8888 } em meu código. Não sei se é adequado usar sua solução
Alguma chance de ser incluído no 0.19.0?
@astappev isso definitivamente parece que precisa de uma correção o mais rápido possível. Há muitos problemas relacionados e PRs que preciso analisar, mas vou adicioná-los ao meu roteiro 0.19.0.
@emilyemorehouse , você tem alguma estimativa de quando será lançado?
O PR # 959 resolve a parte crítica do problema, outros problemas, como redirecionamentos de proxy, e pode ser melhorado posteriormente. As mudanças em # 959 são muito simples e podem ser publicadas em apenas alguns minutos.
@Sitronik isso funciona para mim, obrigado
A correção de @jan-molak salvou meu dia.
+1 para a fusão do PR.
Outro +1 para fundir isso !!
Mesmo problema ... por favor, mescle!
Mesmo problema aqui
@Sitronik que funciona para mim, obrigado - por favor, mescle!
No entanto, as configurações de proxy não parecem ser lidas das variáveis de ambiente (http_proxy / https_proxy), mas devem ser especificadas como parte de AxiosRequestConfig.
1 Ainda estou usando as soluções alternativas mencionadas acima, mas adoraria ver este trabalho pronto para uso.
+1 Quando você conserta isso? Mas também precisamos do no_proxy ...
@Sitronik, por favor, adicione PR. Seu pacote axios-https-proxy-fix
funciona muito bem. axios.defaults.proxy = {host: ip, port: port}
Ainda é um problema, usaria esse pacote, mas seus muitos commits por trás? Isso não seria um problema: S
usaria esse pacote, mas seus muitos commits por trás?
O mesmo para mim, enquanto espero por essa mudança, vou para node-fetch + httpsProxyAgent + bluebird. Funciona bem.
@Makoehle
Ei, acabei fazendo funcionar, tente exportar http e https para "" no seu terminal
export http_proxy="" && export https_proxy=""
Obrigado, eu sei sobre as variáveis env. Eu tentei de tudo. Meu palpite é que tem a ver com # 1207
Aguardando mesclagem também. Por que é tão longo?
Não consigo resolver no 0.19.0-beta.1, mas consertei assim
// 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 deve corrigir o problema, estou encerrando o problema e sinta-se à vontade para criar um novo se alguém ainda tiver o problema
@Khaledgarbaya Ainda estou tendo esse problema com o 0.19.0-beta.1
Minha pergunta é como deve ser minha solicitação de proxy (e como funciona o sinalizador isHttps?).
Presumi que, para HTTPS sobre HTTP, eu simplesmente definiria o url / porta http para o proxy assim:
axiosRequestOptions.proxy = {
host: '192.0.01',
port: '8888',
// isHttps: true, ?
}
Dito isso, o acima ainda falha, então estou me perguntando se é um problema de configuração / documentação em que minha estruturação da propriedade / objeto de proxy é a causa.
@necevil
host: '192.0.01'
O 0.19.0-beta.1 ainda não funciona. Continuei recebendo Request failed with status code 400
. Perdi muito tempo com isso. Mudei para a biblioteca de pedidos e funcionou perfeitamente na primeira tentativa.
Encontrou o mesmo problema.
const axios = require('axios-https-proxy-fix')
resolveu o problema para mim.
Depois de atualizar para 0.18.0
isso parece estar funcionando para mim. Eu tive que especificar as seguintes opções para meu caso de uso:
axios.get('<some_url_on_corporate_intranet>', {
proxy: false,
httpsAgent: https.Agent({
rejectUnauthorized: false // Allows the use of self-signed certificates (not recommended)
})
tentei todas as soluções e todas falharam com base no axios 0.18
solução final :
instalar o módulo nginx ngx_http_proxy_connect_module
em seguida, solicite o url https via proxy http com solicitação-promessa
Você não precisa do Nginx se estiver usando solicitação. Solicitar proxies manipulados bem.
-
Anthony
Em 17 de janeiro de 2019, às 20h44, redbearder [email protected] escreveu:
tentei todas as soluções e todas falharam com base no axios 0.18
solução final :
instalar o módulo nginx ngx_http_proxy_connect_module
em seguida, solicite o url https via proxy http com solicitação-promessa-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub ou ignore a conversa.
Você não precisa do Nginx se estiver usando solicitação. Solicitar proxies manipulados bem. - Anthony
…
Em 17 de janeiro de 2019, às 20h44, redbearder @ . * > escreveu: tentei todas as soluções e todas falharam com base no axios 0.18 solução final: instale o módulo nginx ngx_http_proxy_connect_module e, em seguida, solicite o url https via proxy http com solicitação-promessa - Você está recebendo isso porque foi mencionado. Responda a este e-mail diretamente, visualize-o no GitHub ou ignore a conversa.
Obrigado pela resposta
Presumo que as pessoas enviarão solicitações através de um único endereço IP como gateway de proxy, é isso que farei
No entanto, a promessa de solicitação detecta um erro "RequestError: Erro: o soquete de encapsulamento não pôde ser estabelecido, código 400"
então eu não encontro solução do Node e então tento consertar do lado do Gateway
e a solução vem acima
2 anos depois, ainda quebrado !!!
Use a promessa de solicitação.
Anthony
http://profullstack.com
Em 18 de julho de 2019, às 7h05, Yassien [email protected] escreveu:
2 anos depois, ainda quebrado !!!
-
Você está recebendo isso porque foi mencionado.
Responda a este e-mail diretamente, visualize-o no GitHub ou ignore a conversa.
Aqui está o que fiz por aqueles que toparam com isso e ainda querem usar axios:
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});
Isso permitirá que você faça solicitações https em um proxy http, de forma simples e organizada.
Continuo tendo o mesmo problema após 2 anos.
Alguém está trabalhando nisso ou podemos nos juntar para contribuir?
Acabei de encontrar esse problema sozinho. Espero que vocês consigam consertar isso em algum momento.
A solução de czl032405 de usar proxy-agent
funcionou para mim.
De acordo com a versão 0.19.0, isso foi corrigido. Visto que obviamente não mudou, um novo problema deve ser aberto
Esta funcionalidade ainda está quebrada no axios 0.19.
A versão 0.19.0 falha com a mensagem _ "Erro: Protocolo" http: "não compatível. Esperado" https: "" _
A versão 0.19.1 falha com _ "Erro: tempo limite de 1000 ms excedido" _. Aumentar o tempo limite não ajuda. O servidor proxy espera uma solicitação CONNECT
enquanto o axios envia uma solicitação GET
.
Comentários muito úteis
Tive um problema semelhante recentemente, minha solução foi usar um túnel HTTPS sobre HTTP, especificar a porta 443 explicitamente no URL e desativar a detecção automática de proxy em axios:
Mais sobre a solução neste artigo .
Espero que isto ajude,
Jan