Интернет-сеть новичка здесь. Я пытаюсь отправить https запросы с сервера Node JS с помощью npm-модуля socks через socks-прокси на сервер HTTPS Java. Я могу сделать отдельные запросы https через прокси без штрафа, например, с помощью модуля npm 'socks5-https-client'.
Я ожидаю ответ 200 OK на мой запрос, но вместо этого сервер Java выдаетисключение SSLE: нераспознанное сообщение SSL, ошибка соединения в виде открытого текста.
Код JS моего узла очень прост:
const options = {
proxy: {
host: '<proxy ip>',
port: 1080,
type: 5
},
destination: {
host: '<java server ip>',
port: 443
},
command: 'connect'
};
try {
const info = await SocksClient.createConnection(options);
info.socket.write('GET /users HTTP/1.1\nAuthorization: Basic <token>\n\n');
info.socket.on('data', (data) => {
console.log(data.toString());
} catch (err) {
// Handle errors
}
Код сервера Java:
SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
SSLServerSocket listenSocket = (SSLServerSocket) ssf.createServerSocket(portNum, 50);
boolean done = false;
while (!done) {
clientSocket = listenSocket.accept();
if (Thread.currentThread().isInterrupted()) {
Logger.logMessage("interrupted during accept()");
done = true;
break;
}
InputStream in = clientSocket.getInputStream();
// Read the initial request line from the client
ByteArrayOutputStream inLineA = new ByteArrayOutputStream(100);
int ch = -1;
try {
clientSocket.setSoTimeout(10000);
while ((ch = in.read()) != '\n' && ch != -1)
inLineA.write((byte) ch);
}
catch (Exception e) {
e.printStackTrace(System.out);
clientSocket.close();
continue;
}
[ ... process HTTP request here ]
}
ПослеЯ подумал, что проблема в том, что модуль socks использует net.Socket, который небезопасен. Однако, когда я выключаю его для tls.TLSSocket, это приводит к тайм-ауту соединения с прокси.
Как я могу подключить сокет через прокси и отправлять запросы https? Есть ли проблема с моим мышлением?