SocksClient.createConnection అభ్యర్థించిన destination కు కనెక్ట్ అయిన stream ను తిరిగి ఇస్తుంది. HTTPS కోసం ఆ stream HTTP అభ్యర్థనను మోసుకెళ్లే ముందు ఇంకా TLS handshake అవసరం.

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

SOCKS5 proxy జాబితా proxy host మరియు port కోసం అభ్యర్థులను అందిస్తుంది. onTransportError మరియు onResponseBytes ఇప్పటికే ఉన్న అప్లికేషన్‌కు చెందినవి; రెండవది HTTP response stream ను విశ్లేషించాలి. TLS డేటా ముక్కలు స్వతంత్రంగా పూర్తి HTTP సందేశాలు కావు.

servername destination యొక్క DNS పేరు. Node యొక్క క్రింది స్థాయి tls.connect డిఫాల్ట్‌గా SNI ను ప్రారంభించదు, మరియు proxy hostname వెబ్‌సైట్ సర్టిఫికెట్ గుర్తింపు కాదు.

సర్టిఫికెట్ ధృవీకరణను ఆన్‌లో ఉంచండి. కనెక్ట్ అయిన socket ను అందించడం ద్వారా TLS గుర్తింపును నిలుపుకుంటూ వెబ్‌సైట్‌కు ప్రత్యేక ప్రత్యక్ష కనెక్షన్ తెరవడం నివారించబడుతుంది.

SOCKS టైమౌట్ ఆ చర్చను పరిమితం చేస్తుంది. తరువాతి TLS మరియు అప్లికేషన్ మార్పిడికి ఇంకా కాల్ చేసేవారి ఉద్దేశిత టైమౌట్, రద్దు మరియు శుభ్రపరిచే విధానం అవసరం.

సంబంధిత వ్యాసాలు