2013-05-09 3 views
4

J'essaie d'appeler un service Web https depuis node.js. Je suis derrière un proxy, donc je fournis le proxy et le port dans les options avec les informations d'identification. Mais je reçois l'erreur suivanteAppel d'un service Web https dans node.js (Derrière le proxy)

[Error: 2060:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol :openssl\ssl\s23_clnt.c:683: ]

Ce qui suit est l'extrait de code dans lequel je suis en train d'appeler le service Web https:

var https = require('https'); 
var username = 'username'; 
var password = 'password'; 
var auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64'); 
var data = ''; 
var options = { 
hostname: 'proxy', 
port: 8080, 
path: 'https://crm.zoho.com/crm/private/json/Leads/getMyRecords?authtoken=11111tsvs26677026bcba45ae3f&scope=crmapi', 
headers: { 
     "Proxy-Authorization" : auth 
    } 
}; 

console.log("options- " + JSON.stringify(options) + '\n'); 

var req = https.request(options, function(res) { 

console.log("statusCode- " + res.statusCode); 
console.log("headers-" + res.headers); 

res.on('data', function(chunk) { 
    data += chunk; 
}); 

res.on('end', function (chunk) { 
    console.log('response-' + data); 
}); 

}); 

req.end(); 

req.on('error', function(e) { 
    console.error(e); 
}); 

Quelqu'un peut-il s'il vous plaît me aider à résoudre ce problème?

Merci à l'avance, Manoj

Répondre

4

J'ai eu le même problème par erreur en utilisant

var https = require('https'); 

Mais mon proxy requiert HTTP uniquement, le proxy en charge pour compléter la demande HTTPS parce que vous définissez sur le paramètre de chemin

(...) 
path: 'https://crm.zoho.com/crm/private/json/Leads/getMyRecords?authtoken=11111tsvs26677026bcba45ae3f&scope=crmapi', 
(...) 

Cela fonctionne pour moi:

// baiken9: use http here 
var http = require('http'); 

var username = 'username'; 
var password = 'password'; 
var auth = 'Basic ' + new Buffer(username + ':' + password).toString('base64'); 
var data = ''; 
var options = { 
    hostname: 'proxy', 
    // baiken9: Proxy Port 
    port: 8080, 
    // baiken9: Add method type in my case works using POST 
    method: "POST", 
    // baiken9: when proxy redirect you request will use https. It is correct as is 
    path: 'https://crm.zoho.com/crm/private/json/Leads/getMyRecords?authtoken=11111tsvs26677026bcba45ae3f&scope=crmapi', 
    headers: { 
    // baiken9: I cannot test it my proxy not need authorization 
    "Proxy-Authorization" : auth, 
    // baiken9: required for redirection 
    host: "crm.zoho.com", 
    // baiken9: length of data to send 
    'content-length': 0 
    } 
}; 

console.log("options- " + JSON.stringify(options) + '\n'); 


var req = http.request(options, function(res) { 

    console.log("statusCode- " + res.statusCode); 
    console.log("headers-" + res.headers); 

    res.on('data', function(chunk) { 
    data += chunk; 
    }); 

    res.on('end', function(chunk) { 
    console.log('response-' + data); 
    }); 

}); 

req.end(); 

req.on('error', function(e) { 
    console.error(e); 
}); 

Ouput:

statusCode- 200 
headers-[object Object] 
response-{"response":{"error":{"message":"Invalid Ticket Id","code":"4834"}}} 

Cordialement

+0

@ BaikeN9Even mon proxy http nécessite uniquement. Si tel est le cas, comment puis-je remédier à ce problème? Pouvez-vous m'aider à résoudre ce problème? – Manoj

+0

J'ai éditer ma réponse et le code a été ajouté avec quelques commentaires expliquant – BaikeN9