尝试使用 HTTP 代理执行 HTTPS 请求失败。
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在这张票中已经描述了这个问题,最终因为 OP 没有同样的问题而关闭: https :
@chovy说:
我仍然遇到无法使用 http 代理访问 https url 的问题。 我可以在请求中做得很好,也可以在 shell 的 curl 中完成。 一些不适用于 axios。 我收到 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 在这种情况下效果很好。
我和我的一个同事发现了这个问题,公关应该很快就会到来
同样的问题:在 http 代理后面请求 https 资源。
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
域。 在 linux 终端内的curl
,解决方案是使用-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。
同样在这里,顺便说一句@mtermoe的公关工作正常
@mtermoe我刚刚离开工作没有成功:(
我使用这个包: https :
如果我用你的替换“axios”,以下错误就会消失:
“错误:写 EPROTO 139800246822688:错误:140770FC :SSL例程:SSL23_GET_SERVER_HELLO :未知协议:../deps/openssl/openssl/ssl/s23_clnt.c :794”
但我有类似的东西:
“错误:getaddrinfo EAI_AGAIN”
我注意到 Messenger 插件发出这样的请求:
`
让客户端 = axios.create({ ... });
client.get('...')
`
你是通过这种方式成功的还是直接通过axios的“请求”功能成功的?
谢谢!
编辑:另一个有这个问题:
https://github.com/axios/axios/pull/959#issuecomment -337595602
有机会合并吗? 我们可以利用新添加的 config.transport 来避免这个问题吗?
ups,同样的问题!
不幸的是,这个拉取请求没有合并,但我修复了这个问题https://github.com/Sitronik/axios
最近有一个类似的问题,我的解决方案是使用 HTTPS-over-HTTP 隧道,在 URL 中明确指定端口 443 并在 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我试过你的解决方案,但得到错误:套接字挂断。
我想要的是查看请求如何通过查尔斯,所以我打开查尔斯,并在我的代码中将代理设置为 {host:'127.0.0.1', port: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 标志如何工作?)。
我假设对于基于 HTTP 的 HTTPS,我会简单地为代理设置 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
然后通过带有request-promise 的http 代理请求 https url
如果您使用请求,则不需要 Nginx。 请求处理代理很好。
——
安东尼
2019 年 1 月 17 日晚上 8:44,redbearder [email protected]写道:
基于 axios 0.18 尝试了所有解决方案和所有失败
最终解决方案:
安装 nginx 模块 ngx_http_proxy_connect_module
然后通过带有 request-promise 的 http 代理请求 https url—
你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看,或将线程静音。
如果您使用请求,则不需要 Nginx。 请求处理代理很好。 - 安东尼
…
在 2019 年 1 月 17 日,晚上 8:44,redbearder @ 。 * > 写道:基于 axios 0.18 最终解决方案尝试了所有解决方案但都失败了:安装 nginx 模块 ngx_http_proxy_connect_module 然后通过带有 request-promise 的 http 代理请求 https url — 您收到此消息是因为您被提及。 直接回复此邮件,在 GitHub 上查看,或将线程静音。
谢谢你的回复
我假设人们将通过单个 IP 地址作为代理网关发送请求,这就是我要做的
但是请求承诺捕获错误“RequestError:错误:无法建立隧道套接字,代码400”
所以我没有从 Node 找到解决方案,然后我尝试从网关端修复它
解决方案就出来了
2年了,还是坏了!!!
使用请求承诺。
在2019年7月18日,在上午7:05,Yassien [email protected]写道:
2年了,还是坏了!!!
—
你收到这个是因为你被提到了。
直接回复此邮件,在 GitHub 上查看,或将线程静音。
这是我为那些偶然发现并仍然想使用 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});
这将让您通过 http 代理发出 https 请求,简单而整洁。
2年后仍然有同样的问题。
有人在做这方面的工作吗,或者我们可以加入进来做出贡献吗?
刚刚自己遇到了这个问题。 希望你们能在某个时候解决这个问题。
czl032405 使用proxy-agent
的解决方案对我有用。
根据 0.19.0 版本,此问题已得到修复。 由于它显然没有,所以应该开一个新的问题
这个功能在 axios 0.19 中仍然被破坏。
版本 0.19.0 失败并显示消息 _"Error: Protocol "http:" not supported. Expected "https:""_
0.19.1 版失败并显示 _“错误:超过 1000 毫秒超时”_。 增加超时没有帮助。 代理服务器期望CONNECT
请求,而 axios 发送GET
请求。
最有用的评论
最近有一个类似的问题,我的解决方案是使用 HTTPS-over-HTTP 隧道,在 URL 中明确指定端口 443 并在 axios 中禁用自动代理检测:
更多关于本文中的解决方案。
希望这可以帮助,
简