см. https://kodaktor.ru/g/stream
superagent, node-fetch, isomorphic-fetch, axios, restler
httpie
void child_process.exec('curl https://kodaktor.ru/g/ko_resp', (error, stdout, stderr) => console.log(error ?? stdout));
https.get
let t; void (async () => { t = await fetch('//kodaktor.ru/j/users').then(x => x.json()); })();
[теперь] в консоли браузера можно и не оборачивать в асинкод:
const t = await fetch('//kodaktor.ru/j/users').then(x=>x.json());
const t = await (await fetch('//kodaktor.ru/j/users')).json();
// в REPL-----------
// для строчных данных
let t; void http.get('http://kodaktor.ru/j/users', (r, b = '') => r.on('data', d => b += d).on('end', () => t = JSON.parse(b)));
console.log(t);
// для бинарных данных (5 байт, ≺Buffer 01 02 03 04 30>)
let t; void http.get('http://kodaktor.ru/binary', (r, b = []) =>r.on('data', d => b.push(d)).on('end', () => t = Buffer.concat(b)));
console.log(t);
// демо метода POST для сравнения с fetch и file_get_contents
const options = {
hostname: 'kodaktor.ru', port: 80, path: '/api2/enigma/2/3', method: 'POST'
};
require('http')
.request(options, res => res
.on('data', (d => b += d))
.on('end', () => console.log(JSON.parse(b).result))
, b = '')
.end();
// сырой вариант с модулем net
void net.connect(80, '151.248.115.32').on('data', d => console.log(String(d))).write('GET /j/users\n\n');
и с http
void http.get('http://151.248.115.32/j/users', r => r.on('data', d => console.log(String(d))));
т.е. тут не используется end т.е. данные ответа выводятся почанково
-----
Конвейер
void http.get('http://kodaktor.ru/j/users', r => r.pipe(process.stdout));
или
node -p "require('fs').createReadStream('./package.json').pipe(process.stdout)"
или
(async () => console.log(String(await require('fs').promises.readFile('./package.json'))))();
А что делает вот такой сценарий, размещённый в файле q.js?
echo "require('fs').createReadStream(process.argv[1]).pipe(process.stdout);" > q.js
Выполните его (node q.js) и ответьте на вопрос: как называются подобные программы?
yarn add request
let t; void require('request')('http://kodaktor.ru/j/users', (e, r, body) => t = JSON.parse(body).users);
или
request(url.format({protocol: 'https', host: 'kodaktor.ru', pathname: '/g/get'})).pipe(SOME_RESPONSE_STREAM);