Я хочу подключиться к прокси-серверу, который разрешает только HTTP-соединения, общаться с целевым сервером по протоколу HTTPS.
В документации прокси-сервера говорится, что единственный способ сделать это — использовать глагол HTTP Connect (они планируют добавить прямые HTTPS-соединения к самому прокси-серверу, но на данный момент разрешены только HTTP-соединения).
В моей программе на C ++ я успешно подключился и работал с целевым сервером, используя ssl_stream
в течение пары месяцев, используя boost::asio
без boost::beast
, но теперь я хочу использовать прокси-сервер с несколькими ip, чтобы избежать запретов IP-адресов в Cloudflare, и использовать boost::beast
сделать вещи проще; Итак, я теперь, как работать с Boost :: Asio, но я boost::beast
новичок (и я не совсем понимаю, как работает SSL).
Я думаю, что в моем понимании, когда вы используете ssl_stream
вы записываете все сообщение, однако мне сейчас нужно вставить зашифрованное сообщение в тело HTTP CONNECT, и я не знаю, как это сделать.
Я читал, что это как-то связано с lowest_layer
/next_layer
вещь, но я не уверен.
Кто-нибудь может привести пример полного соединения для чтения / записи с прокси-сервером? или хотя бы дальнейшие уточнения?
Объявить переменную для соединения (ioc
это io_context
)
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> stream{ioc};
Создайте сообщение запроса HTTP CONNECT (req
) используя зверя
Отправьте запрос в прокси в виде простого текста (примечание next_layer()
)
boost::beast::http::write(stream.next_layer(), req);
Прочитайте ответ HTTP от прокси
Теперь выполните SSL рукопожатие:
stream.handshake(boost::asio::ssl::stream_base::client);
На этом этапе вы можете писать HTTP-запросы stream
и читать ответы HTTP от stream
используя зверя как обычно (не используйте next_layer()
снова).
Других решений пока нет …