SocksClient.createConnection vraća tok povezan sa traženim odredištem. Za HTTPS taj tok i dalje treba TLS rukovanje prije nego što prenese HTTP zahtjev.

import { SocksClient } from 'socks';
import tls from 'node:tls';

const targetHost = 'service.example';
const info = await SocksClient.createConnection({
  proxy: { host: 'proxy.example', port: 1080, type: 5 },
  command: 'connect',
  destination: { host: targetHost, port: 443 },
  timeout: 10000,
});
const secure = tls.connect({
  socket: info.socket,
  servername: targetHost,
});
secure.on('error', onTransportError);
secure.on('data', onResponseBytes);
secure.once('secureConnect', () => {
  secure.write(
    `GET /data HTTP/1.1\r\nHost: ${targetHost}\r\nConnection: close\r\n\r\n`
  );
});

Lista SOCKS5 proxyja daje kandidate za host i port proxyja. onTransportError i onResponseBytes pripadaju postojećoj aplikaciji; drugi mora parsirati tok HTTP odgovora. TLS dijelovi podataka nisu samostalno kompletne HTTP poruke.

servername je DNS naziv odredišta. Nodeov niskorazinski tls.connect ne uključuje SNI po zadanom, a naziv hosta proxyja nije identitet certifikata web stranice.

Ostavite provjeru certifikata uključenom. Dostavljanje povezane utičnice izbjegava otvaranje zasebne direktne veze prema web stranici uz očuvanje njenog TLS identiteta.

SOCKS tajmaut ograničava to pregovaranje. Kasnija TLS i aplikacijska razmjena i dalje zahtijevaju namjeravani tajmaut, otkazivanje i politiku čišćenja pozivatelja.

Povezani članci