如何使用axios进行https调用?

1u4esq0p  于 2022-11-05  发布在  iOS
关注(0)|答案(8)|浏览(1076)

我正在尝试使用axios和代理服务器进行https调用:

const url = "https://walmart.com/ip/50676589"
var config = { proxy: { host: proxy.ip, port: proxy.port } }

axios.get(url, config)
.then(result => {})
.catch(error => {console.log(error)})

我使用的代理服务器都在美国,高度匿名,支持HTTP和HTTPS。
我收到此错误:
{错误:写入EPROTO 140736580649920:错误:140770 FC:SSL例程:SSL23_GET_SERVER_HELLO:未知协议:../deps/openssl/openssl/ssl/s23_clnt. c:794:
为了确保问题出在axios上而不是代理上,我尝试了以下方法:
卷边-x 52.8.172.72:4444-L 'https://www.walmart.com/ip/50676589'
这完全工作得很好。
我如何配置axios以使用代理和https URL?

ecbunoof

ecbunoof1#

如果使用https代理服务器,Axios https代理服务器支持将被中断。请尝试使用http通过httpsProxyAgent传递代理服务器。

var axios = require('axios'); 

let httpsProxyAgent = require('https-proxy-agent');
var agent = new httpsProxyAgent('http://username:pass@myproxy:port');

var config = {
  url: 'https://google.com',
  httpsAgent: agent
}

axios.request(config).then((res) => console.log(res)).catch(err => console.log(err))

或者,Axios的一个分支包含以下内容:axios-https-proxy-fix,但我推荐第一种方法,以确保Axios的最新更改。

vbkedwbf

vbkedwbf2#

试试这个,我喜欢.
第一个

npm install axios-https-proxy-fix

然后

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

cidc1ykv3#

您可以通过查看此问题来解决此问题
在这个解决方案中,使用http(s)代理代替使用代理接口。对于它,解决方案使用本地节点模块https-proxy-agent

var ProxyAgent = require('https-proxy-agent');
var axios = require('axios');

const agent = ProxyAgent('http://username:pass@myproxy:port')

var config = {
  url: 'https://google.com',
  proxy: false,
  httpsAgent: agent
};

要使其正常工作,代理属性必须等于false。

ojsjcaue

ojsjcaue4#

https-proxy-agentnode-tunnel解决方案确实对我有效,但是它们都不支持使用NO_PROXY的条件代理。
我发现global-agent是我的最佳解决方案,因为它修改了核心http和https对象,并将自动应用于任何使用它们的库,包括axiosgotrequest等。
用法很简单。

npm i global-agent
npm i -D @types/global-agent

import 'global-agent/bootstrap';添加到服务器的入口点(index.ts)。
使用这些环境变量运行,并确保HTTP_PROXY、HTTPS_PROXY不在环境中。

export GLOBAL_AGENT_NO_PROXY='*.foo.com,baz.com'
export GLOBAL_AGENT_HTTP_PROXY=http://127.0.0.1:8080

这就是我最终使用它的原因。

import { bootstrap } from 'global-agent';

const proxy = process.env.EXTERNAL_PROXY;

if (proxy) {
  process.env.GLOBAL_AGENT_HTTP_PROXY = proxy;
  process.env.GLOBAL_AGENT_NO_PROXY = process.env.NO_PROXY;
  process.env.GLOBAL_AGENT_FORCE_GLOBAL_AGENT = 'false';
  bootstrap();
  logger.info(`External proxy ${proxy} set`);
}
ipakzgxi

ipakzgxi5#

我知道这是一个老职位,但我希望这个解决方案节省时间的任何人面临的SSL问题与Axios

  • 您可以使用HTTP代理,我建议使用hpagent
const axios = require("axios");
const { HttpProxyAgent, HttpsProxyAgent } = require("hpagent");

async function testProxy() {
  try {
    const proxy = "http://username:password@myproxy:port";
    // hpagent configuration
    let agentConfig = {
      proxy: proxy,
      // keepAlive: true,
      // keepAliveMsecs: 2000,
      // maxSockets: 256,
      // maxFreeSockets: 256,
    };
    axios.defaults.httpAgent = new HttpProxyAgent(agentConfig);
    axios.defaults.httpsAgent = new HttpsProxyAgent(agentConfig);
    // Make a simple request to check for the IP address.
    let res = await axios.get("https://api.ipify.org/?format=json");
    console.log(res.data);
  } catch (error) {
    console.error(error);
  }
}

testProxy();
7ivaypg9

7ivaypg96#

尝试在URL中明确指定端口:

const url = "https://walmart.com:443/ip/50676589"

如果您还需要HTTPS-over-HTTP隧道,您可以在this article中找到解决方案。
希望这能有所帮助,

mf98qq94

mf98qq947#

这个错误是因为axios试图通过https代理您的请求(它从您的url获取),有这个票证跟踪它:https://github.com/axios/axios/issues/925

eufgjt7s

eufgjt7s8#

上周(2020年2月),我更新了依赖项,试图找出服务停止的原因,为此我损失了一天的工作。axios-https-proxy-fix将导致Axios无限期挂起,而不会超时或引发与npm中其他库冲突的错误。使用节点隧道(https://github.com/koichik/node-tunnel)创建代理也可以工作。

const tunnel = require('tunnel');
class ApiService {
  get proxyRequest() {
    const agent = tunnel.httpsOverHttp({
      proxy: {
        host: 'http://proxy.example.com',
        port: 22225,
        proxyAuth: `username:password`,
      },
    });
    return axios.create({
      agent,
    })
  }
}

相关问题