Подтвердить что ты не робот

Кодирование URL-адреса в Node.js

Я хочу отправить http-запрос с помощью node.js. Я:

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);
    });

Когда мой path выглядит следующим образом:

/api/mainsms/message/send?project=geoMessage&sender=gis&message=tester_response&recipients=79089145***&sign=2c4135e0f84d2c535846db17b1cec3c6

Его работа. Но когда параметр message содержит любые пробелы, например tester response, все сломалось. И в консоли я вижу, что http использует этот URL:

  /api/mainsms/message/send?project=geoMessage&sender=gis&message=tester

Как отправить пробелы. Или я просто не могу использовать пробелы в URL-адресе?

4b9b3361

Ответ 1

То, что вы ищете, называется кодировка URL-адреса.

path: '/api/mainsms/message/send?project=' + project + 
'&sender=' + sender + 
'&message=' + message +
'&recipients=' + from + 
'&sign=' + sign

необходимо изменить на

path: '/api/mainsms/message/send?project=' + encodeURIComponent(project) +
'&sender=' + encodeURIComponent(sender) +
'&message=' + encodeURIComponent(message) + 
'&recipients='+encodeURIComponent(from) +
'&sign=' + encodeURIComponent(sign)

Примечание:

Доступны две функции. encodeURI и encodeURIComponent. Вы должны использовать encodeURI, когда вам нужно кодировать весь URL и encodeURIComponent, когда параметры строки запроса должны быть закодированы, как в этом случае. Прочтите этот ответ для подробного объяснения.

Ответ 2

Вопрос заключается в Node.js. encodeURIcomponent не определен в Node.js. Используйте вместо этого метод querystring.escape().

var qs = require('querystring');
qs.escape(stringToBeEscaped);

Ответ 3

Лучший способ - использовать собственный модуль QueryString:

var qs = require('querystring');
console.log(qs.escape('Hello $ é " \' & ='));
// 'Hello%20%24%20%C3%A9%20%22%20\'%20%26%20%3D'

Это собственный модуль, поэтому вам не нужно npm install что-либо.