axios: Axios proxy is not working.

Describe the bug I have installed anyProxy 3rd party proxy ( http://anyproxy.io/en/#install ) When I type anyproxy in my command line then my proxy starts on http://localhost:8001 and I have also preview of proxy status on http://localhost:8002.

On the Frontend site, I’m using axios like:

axios
      .get("https://randomuser.me/api/?results=50", {
        proxy: {
          host: "http://localhost",
          port: 8001
        }
      })
      .then(response => {
        const data = response.data.results;
        this.setState({ data });
      })
      .catch(error => {
        console.log(error);
      });

Here is a simplified version of this: https://codesandbox.io/s/j35zl05lk5

But the request is omitting proxy and is sent directly: image

It behaves like the axios proxying functionality would not be even working.

I also tried stuff like:

let httpsProxyAgent = require("https-proxy-agent");
var agent = new httpsProxyAgent("http://localhost:8001");
...
 axios
      .get("https://randomuser.me/api/?results=50", {
        httpAgent: agent
      })
      .then(response => {
        const data = response.data.results;
        this.setState({ data });
      })
      .catch(error => {
        console.log(error);
      });

But it gives me the same result as the previous one. Also tried npm dependency called “axios-https-proxy-fix”, but with the same result.

Expected behavior Proxying request to the proxy server.

Environment:

  • Axios Version “axios”: “0.18.0”,
  • OS: Win 10
  • Browser Chrime
  • Browser Version 73.0.3683.86

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Reactions: 11
  • Comments: 21

Most upvoted comments

I can confirm. Full post on https://stackoverflow.com/questions/55981040/axios-https-request-over-a-proxy

I tried the proxy param, which is apparently not supported in browser, but at least I tried :

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

And also with the httpsAgent param :

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

None of them work.

I was able to make requests to some servers but not all. Seems like it depends on the servers cipher suites. For all servers with just cipher suites beginning with ECDHE_ the request failed.

Following the axios’ code we need to make sure that this if expression is false: http.js#L100 . I fixed the problem with this axios configuration (applying it to @habmukandu code above):

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

const const axiosDefaultConfig = {
    baseURL: 'https://jsonplaceholder.typicode.com/posts',
    proxy: false,
    httpsAgent: new HttpsProxyAgent('http://142.93.165.82:8080')
};

const axios = require ('axios').create(axiosDefaultConfig);
axios.get('42')
    .then(function (response) {
        console.log('Response with axios was ok: ' + response.status);
    })
    .catch(function (error) {
        console.log(error);
    });

tldr: setup httpsAgent and (!) set proxy: false.

none of these shite solutions work!

i did 3 things that got it working.

  1. updated node to v11+
  2. added --tls-min-v1.0 flag like this node --tls-min-v1.0 index.js
  3. updated axios to .19

first 2 didn’t help without the last one.

Let me make some conclusions,

  • For the original issue, as I answered in stackoverflow, axios’s config.proxy is Node.js only. I think it is meaningless in browsers. You can check lib/adapters/xhr.js and will find nothing related to proxy there.
  • For other users discussed proxies in Node.js, there were two main ways.

@nsharma1989 Sounds frustrating. I can’t help beyond my own success using node-tunnel with axios. I don’t know if a server can force using a signed certificate or not. I was reading about self-signed certificates which need to be shared between the client and server.

I assume you placed rejectUnauthorized: false on the agent configuration

const agent = tunnel.httpsOverHttp({
  proxy: {
     host: 'http://proxy.example.com',
     port: 22225
     proxyAuth: `username:password`,
   },
  rejectUnauthorized: false,
 });

Sorry I can’t be more help.