Je veux envoyer une requête http en utilisant node.js. Je fais:
http = require('http');
var options = {
Host: 'www.mainsms.ru',
path: '/api/mainsms/message/send?project='+project+'&sender='+sender+'&message='+message+'&recipients='+from+'&sign='+sign
};
http.get(options, function(res) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
}).on('error', function(e) {
console.log('ERROR: ' + e.message);
});
Quand ma path
ressemble à ceci:
/api/mainsms/message/send?project=geoMessage&sender=gis&message=tester_response&recipients=79089145***&sign=2c4135e0f84d2c535846db17b1cec3c6
C'est du travail. Mais lorsque le paramètre message
contient des espaces, par exemple tester response
, tout est cassé. Et dans la console, je vois que http utilise cette URL:
/api/mainsms/message/send?project=geoMessage&sender=gis&message=tester
Comment envoyer des espaces. Ou je ne peux tout simplement pas utiliser les espaces dans l'URL?
Ce que vous recherchez s'appelle - Codage de composant d'URL .
path: '/api/mainsms/message/send?project=' + project +
'&sender=' + sender +
'&message=' + message +
'&recipients=' + from +
'&sign=' + sign
doit être changé pour
path: '/api/mainsms/message/send?project=' + encodeURIComponent(project) +
'&sender=' + encodeURIComponent(sender) +
'&message=' + encodeURIComponent(message) +
'&recipients='+encodeURIComponent(from) +
'&sign=' + encodeURIComponent(sign)
Remarque:
Il y a deux fonctions disponibles. encodeURI
et encodeURIComponent
. Vous devez utiliser encodeURI
lorsque vous devez coder l'URL complète et encodeURIComponent
lorsque les paramètres de la chaîne de requête doivent être codés, comme dans ce cas. Veuillez lire cette réponse pour une explication détaillée.
La question est pour Node.js. encodeURIcomponent
n'est pas défini dans Node.js. Utilisez plutôt la méthode querystring.escape()
.
var qs = require('querystring');
qs.escape(stringToBeEscaped);
La meilleure solution consiste à utiliser le module natif QueryString :
var qs = require('querystring');
console.log(qs.escape('Hello $ é " \' & ='));
// 'Hello%20%24%20%C3%A9%20%22%20\'%20%26%20%3D'
Ceci est un module natif, vous n'avez donc pas à npm install
quoi que ce soit.