@theundershot
Node.JS разработчик

Node.JS туннелирование HTTP/HTTPS/etc запросов через прокси?

Я создаю стабильное сокет-соединение к прокси серверу и мне нужно отправлять запросы на разные домены и протоколы (http, https, итд). Столкнулся с проблемой отправки запросов используя полученный сокет после соединение к прокси серверу:

var socket = net.connect(
    1111, // proxy port
    'xx.xx.xxx.xx' // proxy host
);

socket.on('connect', function(a) {
    console.log('--- connect', socket.remoteAddress);

    // connecting to https host
    socket.write(
        'CONNECT www.google.com:443 HTTP/1.1\r\n' +
        'Proxy-Connections: keep-alive\r\n' +
        'Host: www.google.com\r\n\r\n',
    function() {

        // send GET request and wait for response
        socket.write(
            'GET / HTTP/1.0\r\n' +
            'User-Agent: Node.js/0.6.6\r\n' +
            'Connection: keep-alive\r\n' +
            'Host: www.google.com\r\n\r\n',
            function(a) {
                return socket;
            }
        );

        /*
            another requests to different protocols/ports...
            socket.write(...)
        */

        return socket;
    });
});

socket.on('data', function(a) {
    console.log('--- data', a.toString());
});
socket.on('drain', function() {
    console.log('drain!');
});

socket.on('timeout', function() {
    console.log('timeout!');
});
socket.on('close', function() {
    console.log('Connection closed');
});
socket.on('end', function() {
    console.log('Connection end');
});


Выполнение кода выдает мне следующее:
--- connect xx.xx.xxx.xx
--- data HTTP/1.0 200 Connection established

Connection end
Connection closed


Т.е., https соединение создается успешно, судя по ответу "HTTP/1.0 200 Connection established", но затем прокси соединение закрывается, не выдав ответа на GET запрос и остальные запросы, хотя указан Keep-Alive.

Где ошибка? Гугление привело к созданию разных соединений для https и для остальных протоколов, что не подходит для моей задачи, так как мне нужно отправлять запросы в контексте одного стабильного соединения к прокси серверу.

UPD:
Иногда получаю ошибку:
ssl3_get_record:wrong version number

Но когда пытаюсь указать протокол шифрования SSLv3_method, то получаю ошибку:
ssl3_methods is disabled
  • Вопрос задан
  • 1595 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы