2017-04-16 6 views
0

Au meilleur de ma connaissance, je suis en train de faire la même chose en utilisant 2 approches différentes:Socket raccrocher lors de l'utilisation axios.get, mais pas lorsque vous utilisez https.get

const https = require("https"); 
const axios = require("axios"); 

let httpsAgent = new https.Agent({rejectUnauthorized: false}); 

axios.get(`https://${hostname}:${port}${path}`, {httpsAgent}) 
    .then((data) => { console.log("axios success: " + data.substr(0, 100)); }) 
    .catch((error) => { console.log("axios error: " + error); }); 

let data = ""; 
https.get({ hostname, path, port, agent: httpsAgent }, 
    (response) => { 
     response.on("data", (chunk) => { data += chunk; }); 
     response.on("end",() => { console.log("https success: " + data.substr(0, 100)); }); 
    }) 
    .on("error", (error) => { console.log("https error: " + error); }); 

Quand je lance ce code, J'obtiens 2 résultats différents:

PS C:\Users\me> .\node\node.exe .\generate-test-data.js 
axios error: Error: socket hang up 
https success: [{"cool":"data"... 

Que se passe-t-il ici? J'ai l'impression que cela a un rapport avec l'asynchronisme, mais je ne sais pas très bien comment ... Quelqu'un peut-il me donner un indice sur la façon dont ces deux comportements sont différents?

Répondre

1

ARGH!

Après avoir creusé autour de la source de Axios, je trouve ceci:

if (!proxy) { 
    var proxyEnv = protocol.slice(0, -1) + '_proxy'; 
    var proxyUrl = process.env[proxyEnv] || process.env[proxyEnv.toUpperCase()]; 
    if (proxyUrl) { 
    var parsedProxyUrl = url.parse(proxyUrl); 
    proxy = { 
     host: parsedProxyUrl.hostname, 
     port: parsedProxyUrl.port 
    }; 

    if (parsedProxyUrl.auth) { 
     var proxyUrlAuth = parsedProxyUrl.auth.split(':'); 
     proxy.auth = { 
     username: proxyUrlAuth[0], 
     password: proxyUrlAuth[1] 
     }; 
    } 
    } 
} 

Mais rien pour no_proxy. Semble il y a un feature request for this ... En attendant, je vais juste devoir:

delete process.env['http_proxy']; 
    delete process.env['HTTP_PROXY']; 
    delete process.env['https_proxy']; 
    delete process.env['HTTPS_PROXY']; 
+0

homme dont je avais besoin de cette –