web-dev-qa-db-fra.com

Composant d'URL encodé dans Node.js

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?

14
Kliver Max

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.

37
thefourtheye

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);
12
David Welborn

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.

0
Julien CROUZET