C++ 带有Boost::Beast的SSL隧道

C++ 带有Boost::Beast的SSL隧道,c++,ssl,proxy,boost-asio,boost-beast,C++,Ssl,Proxy,Boost Asio,Boost Beast,我想连接到只允许HTTP连接的代理服务器,通过HTTPS与目标服务器对话 代理服务器文档指出,实现这一点的唯一方法是通过HTTP连接动词(他们计划向代理服务器本身添加直接HTTPS连接,但目前只允许HTTP连接) < >我的C++程序中,在几个月内,我用 SSLWSHIVE/代码>成功地连接和工作在目标服务器上,使用 Boo::ASIO < /> >没有代码> Boo::Boovi,但我现在要用代理使用 Boo::Boovi来使事情变得更容易;因此,我现在知道如何使用boost::asio,但我

我想连接到只允许HTTP连接的代理服务器,通过HTTPS与目标服务器对话

代理服务器文档指出,实现这一点的唯一方法是通过HTTP连接动词(他们计划向代理服务器本身添加直接HTTPS连接,但目前只允许HTTP连接)

< >我的C++程序中,在几个月内,我用<代码> SSLWSHIVE/代码>成功地连接和工作在目标服务器上,使用<代码> Boo::ASIO < /> >没有代码> Boo::Boovi,但我现在要用代理使用<代码> Boo::Boovi<代码>来使事情变得更容易;因此,我现在知道如何使用boost::asio,但我是一个
boost::beast
新手(我也不完全了解SSL是如何工作的)

我的想法是,在我的理解中,当您使用
ssl\u流时,您可以编写整个通信,但是,我现在需要的是在connecthttp主体中插入加密消息,我不知道如何做到这一点

我已经读到这与
最低层
/
下一层
有关,但我不确定

有人能提供一个与代理服务器完全读/写连接的示例吗?或者至少进一步澄清

  • 为连接声明一个变量(
    ioc
    io\u上下文

    boost::asio::ssl::stream{ioc}

  • 使用Beast构建连接HTTP请求消息(
    req

  • 以纯文本形式将请求发送到代理(注意
    next\u layer()

    boost::beast::http::write(stream.next_layer(),req)

  • 从代理读取HTTP响应

  • 如果响应状态为OK(正常),则建立隧道
  • 现在执行SSL握手:

    stream.handshake(boost::asio::ssl::stream\u base::client)

  • 此时,您可以将HTTP请求写入
    stream
    ,并正常使用Beast从
    stream
    读取HTTP响应(不要再次使用
    next_layer()