web-dev-qa-db-ja.com

axios:プロキシ経由のhttps要求

プロキシサーバーで 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:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:../ deps/openssl/openssl/ssl/s23_clnt.c:794:

問題がプロキシではなくaxiosにあることを確認するために、私はこれを試しました:

curl -x 52.8.172.72:4444 -L ' https://www.walmart.com/ip/50676589 '

これはまったく問題なく動作します。

プロキシとhttps URLで動作するようにaxiosを構成するにはどうすればよいですか?

11
etayluz

Httpsプロキシを使用している場合、Axios httpsプロキシサポートは中断されます。 httpを使用して、プロキシを[httpsProxyAgent][1]に渡してみてください。

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の最新の変更を確実にする最初の方法をお勧めします。

11
cyberwombat

これを試して。それは私のために働く。

最初

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});
}
2
Denis Grushak

URLでポートを明示的に指定してみてください。

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

HTTPS-over-HTTPトンネルも必要な場合は、 この記事 に解決策があります。

お役に立てれば、

ヤン

0
Jan Molak

このエラーは、axiosがhttps経由でリクエストをプロキシしようとしているため(URLから取得します)、追跡するチケットがあります: https://github.com/axios/axios/issues/925 =

0
Sergio