【问题标题】:How to use axios with a proxy server to make an https call?如何使用 axios 和代理服务器进行 https 调用?
【发布时间】:2019-09-22 15:55:12
【问题描述】:

基本上是same question here

我正在使用浏览器。以下代码由 webpack 编译。 我试过这个:

const axios = require('axios');

var res = await axios.get('https://api.ipify.org?format=json', {
    proxy: {
        host: 'proxy-url',
        port: 80,
        auth: {username: 'my-user', password: 'my-password'}
    }
});
console.log(res.data); // gives my ip and not the proxy's one.

我也用同样的代码试过了,但是没用:

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

然后,我尝试使用 httpsAgent:

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

var agent = new HttpsProxyAgent('http://my-user:my-pass@proxy-url:port');
var res = await axios.get('https://api.ipify.org?format=json', {
    httpsAgent: agent,
});
console.log(res.data); // gives my ip and not the proxy's one.

这是一个错误吗?我是被诅咒了还是我在阅读文档时遇到了问题?

【问题讨论】:

  • 对代理不太熟悉,更不用说axios了,但是乍一看端口真的应该是80的https请求吗?
  • 您希望获得什么 ip?您是否知道您可能正在使用您的 ISP 提供的单个外部 IP 浏览互联网?如果从 axios 中删除代理的东西,结果是什么?
  • @obermillerk 它只是工作。我通过在线代理检查器进行了测试,我的代理很好,即使通过端口 80 通过 HTTPS。
  • 您是否考虑过使用其他解决方案?想到了 Fetch API,无论如何它将来可能会取代 Axios 之类的。
  • 在这种情况下,我认为这个答案会很有趣:stackoverflow.com/questions/44524236/…

标签: javascript axios


【解决方案1】:

如果您尝试通过 HTTP 代理访问 HTTPS URL,则需要创建 HTTPS-HTTP 隧道。

我在这篇文章中找到了这个问题的解决方案:https://janmolak.com/node-js-axios-behind-corporate-proxies-8b17a6f31f9d。现在完美运行!

【讨论】:

【解决方案2】:

如果您想使用 axios 并解决该问题,请考虑使用 https-proxy-agent 作为代理,如 link 中所述

    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});

【讨论】:

    【解决方案3】:

    axios 的 config.proxy 仅适用于 Node.js。我认为它在浏览器中毫无意义。

    您可以查看lib/adapters/xhr.js,并不会在那里找到与代理相关的任何内容。

    【讨论】:

    • @user1974458 它似乎确实有效。在选项中:proxy: { host: x.x.x.x, port: xx }
    【解决方案4】:

    axios's github page 上有一个未解决的问题。

    该问题自 3 月 31 日起被标记为错误,尚未解决。

    看来你没有被诅咒,只是 axios 的一个 bug。

    您可以将您的详细信息添加到该线程,以便开发团队优先考虑此问题。

    如果您不能等待这个问题得到解决,您可以考虑使用fetch API,就像 cmets 中建议的 @Sumi Straessle。

    【讨论】:

    • 确实...我将在这里发布我所说的内容,但我刚刚使用 node-fetch 进行了测试,并且在 5 分钟内我已经能够做没有成功的事情用 axios 在 2 天内完成。我会坚持使用节点获取。感谢您的回答和时间。
    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 2017-05-03
    • 2017-12-17
    • 2021-09-28
    • 2021-06-04
    • 2019-12-21
    • 2018-02-09
    • 2017-07-28
    相关资源
    最近更新 更多