Радок запыту, які накіроўвае HTTP у Node праз праксі
Стварыце звычайны запыт да HTTP-праксі з дапамогай базавага кліента Node, падзяліўшы канцавы пункт злучэння, абсалютную мэту і загаловак Host.
Для звычайнага HTTP-запыту праз прамы праксі Node злучаецца з праксі і дасылае URL прызначэння ў радку запыту. Тры значэнні апісваюць гэты адзін запыт:
| Значэнне | Прыклад |
|---|---|
| Канцавы пункт TCP-злучэння | proxy.example:8080 |
| Мэта запыту | http://example.com/news?q=proxy |
| Загаловак Host | example.com |
Гэты прыклад для Node 22 робіць падзел відавочным:
const http = require('node:http');
const destination = new URL('http://example.com/news?q=proxy');
const request = http.get({
hostname: 'proxy.example',
port: 8080,
path: destination.href,
headers: { Host: destination.host },
signal: AbortSignal.timeout(15000),
}, (response) => {
console.log(response.statusCode);
response.on('error', console.error);
response.resume();
});
request.on('error', console.error);
Канцавы пункт — гэта запоўніцель; выберыце кандыдата са спісу HTTP-праксі для публічнай HTTP-праверкі і праверце яго адказ. Прыклад асушвае адказ пасля вываду статусу; праграма можа замест гэтага спажываць цела. Запыт застаецца часткай мэты запыту.
Чаму поўны URL мусіць быць там
Сервер-крыніца звычайна атрымлівае мэту накшталт /news?q=proxy. Прамы праксі таксама патрабуе прызначэння, таму HTTP/1.1 вызначае мэту ў абсалютнай форме:
GET http://example.com/news?q=proxy HTTP/1.1
Host: example.com
Паводле правілаў HTTP/1.1 праксі, які атрымаў абсалютную форму, пры перасылцы выкарыстоўвае паўнамоцтва URI і замяняе супярэчлівае атрыманае поле Host. Дасыланне ўзгодненага загалоўка Host прызначэння ўсё яшчэ робіць зыходны запыт адназначным. Імя хоста злучэння ў Node — гэта пасярэднік, таму задавайце загаловак свядома, а не спадзявайцеся на гэты адрас злучэння.
Калі патрабуецца аўтэнтыфікацыя, уліковыя даныя праксі належаць яго пераходу. Параметр запыту auth у Node стварае загаловак Authorization для рэсурсу; гэта не агульны параметр уваходу праз праксі. Выкарыстоўвайце патрабаваную праксі схему і адпаведны кліент праксі, калі абмен больш складаны.
HTTPS дадае тунель
Гэты прыклад ахоплівае звычайную перасылку HTTP. Тыповае HTTPS-злучэнне праз HTTP-праксі спачатку запытвае CONNECT example.com:443, затым запускае TLS да прызначэння ўнутры прынятага тунелю. Змена URL прыкладу на HTTPS не дадае гэтых этапаў.
Для HTTPS або змяшанай працы выкарыстоўвайце падтрымліваны агент або дыспетчар праксі з патрэбнай падтрымкай тунеля. Для сумяшчальных версій Node адзін варыянт — fetch у Undici з ProxyAgent. Пакіньце гэты невялікі прыклад базавага кліента для выпадкаў, калі звычайны HTTP-абмен сам па сабе — тое, што трэба кантраляваць або разумець.