我想连接到只允许HTTP连接的代理服务器,通过HTTPS与目标服务器通信。
代理服务器文档指出,唯一的方法是通过HTTP Connect动词(他们计划将直接HTTPS连接添加到代理服务器本身,但目前只允许HTTP连接)。 / p>
在我的C ++程序中,我在几个月内使用ssl_stream
成功连接并使用目标服务器,使用boost::asio
而没有boost::beast
,但我想要现在使用多ip代理服务器来避免一些Cloudflare的IP禁令,并使用boost::beast
使事情变得更容易;所以,我现在如何使用boost :: asio,但我是boost::beast
新手(我不完全理解SSL的工作方式)。
我认为,根据我的理解,当您使用ssl_stream
时,您会记录整个通信,但是,我现在需要的是在CONNECT HTTP正文中插入加密的消息,我不会# 39;不知道该怎么做。
我已经知道这与lowest_layer
/ next_layer
事情有关,但我不确定。
有人可以提供与代理服务器完全读/写连接的示例吗?或至少进一步澄清?
答案 0 :(得分:2)
为连接声明变量(ioc
是io_context
)
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> stream{ioc};
使用Beast构建CONNECT HTTP请求消息(req
)
以纯文本格式发送请求(注释next_layer()
)
boost::beast::http::write(stream.next_layer(), req);
从代理
现在执行SSL握手:
stream.handshake(boost::asio::ssl::stream_base::client);
此时,您可以向stream
写入HTTP请求,并正常使用Beast从stream
读取HTTP响应(不要再次使用next_layer()
)。