Ответ 1
Публикация данных - это вопрос отправки строки запроса (точно так же, как вы отправляете ее с URL-адресом после ?
) в качестве тела запроса.
Для этого требуются заголовки Content-Type
и Content-Length
, поэтому принимающий сервер знает, как интерпретировать входящие данные. (*)
var querystring = require('querystring');
var http = require('http');
var data = querystring.stringify({
username: yourUsernameValue,
password: yourPasswordValue
});
var options = {
host: 'my.url',
port: 80,
path: '/login',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(data)
}
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log("body: " + chunk);
});
});
req.write(data);
req.end();
(*) Для отправки данных требуется, чтобы заголовок Content-Type устанавливался правильно, т.е. application/x-www-form-urlencoded
для традиционного формата, который будет использовать стандартная HTML-форма.
Легко отправить JSON (application/json
) точно так же; просто JSON.stringify()
данные заранее.
Данные, кодированные по URL-адресу, поддерживают один уровень структуры (т.е. ключ и значение). JSON полезен, когда дело касается обмена данными с вложенной структурой.
В нижней строке: сервер должен иметь возможность интерпретировать рассматриваемый тип контента. Это может быть text/plain
или что-то еще; нет необходимости конвертировать данные, если принимающий сервер понимает их как есть.
Добавьте параметр charset (например, application/json; charset=Windows-1252
), если ваши данные находятся в необычном наборе символов, т.е. не UTF-8. Это может потребоваться, если вы прочтете его из файла, например.