Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用boost通过HTTP代理连接SSL服务器_C++_Http_Ssl_Boost_Proxy - Fatal编程技术网

C++ 使用boost通过HTTP代理连接SSL服务器

C++ 使用boost通过HTTP代理连接SSL服务器,c++,http,ssl,boost,proxy,C++,Http,Ssl,Boost,Proxy,我应该使用传入的webhook向消息平台发送文本消息,就像Slacks一样。但我正在开发的网络与公共网络不同,所以我决定使用我们公司的代理服务器,它可以连接到公共网络。简而言之 客户端-HTTP代理-服务器(消息传递平台) 1。首先,使用普通TCP套接字建立C-P连接。 boost::asio::ssl::stream<boost::asio::ip::tcp::socket> m_socket; boost::asio::ip::tcp::resolver resolver(m_

我应该使用传入的webhook向消息平台发送文本消息,就像Slacks一样。但我正在开发的网络与公共网络不同,所以我决定使用我们公司的代理服务器,它可以连接到公共网络。简而言之

客户端-HTTP代理-服务器(消息传递平台)

1。首先,使用普通TCP套接字建立C-P连接。

boost::asio::ssl::stream<boost::asio::ip::tcp::socket> m_socket;

boost::asio::ip::tcp::resolver resolver(m_io);
boost::asio::ip::tcp::resolver::query query("www.proxy.dev", "8080");
boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve(query);

boost::asio::async_connect(m_socket.lowest_layer(), iterator,
    boost::bind(&ClientSocket::HandleHandShake, this,
        boost::asio::placeholders::error, shared_from_this()));
200 OK
3。握手

m_socket.set_verify_mode(boost::asio::ssl::verify_none);
m_socket.set_verify_callback([](auto&& preverified, auto&& ctx)
{
    char subject_name[256];
    X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle());
    X509_NAME_oneline(X509_get_subject_name(cert), subject_name, 256);
    return preverified;
});

m_socket.async_handshake(boost::asio::ssl::stream_base::client,
        boost::bind(&ClientSocket::HandleHandShake, this,
            boost::asio::placeholders::error, shared_from_this()));
4。编写HTTP POST,读取状态代码。

在第3步中,错误代码通知我“短读”,因此我无法进行下一步

我搜索了很多问题,但并非所有问题都适合我

如果我跳过握手过程,可能会收到“未初始化”错误

若我也跳过“连接”代理并直接向服务器发送“POST”,则可能会收到“403 BADDREQUEST”错误

可以连接服务器,而不是通过代理服务器发送文本消息


感谢阅读。

为什么要编写原始https握手?为什么不使用libs,比如
curl
?@我在构建程序时使用的Boost库首先支持https握手功能,所以我就使用它。谢谢你的建议。我将尝试原始https握手过程。为什么要编写原始https握手?为什么不使用libs,比如
curl
?@我在构建程序时使用的Boost库首先支持https握手功能,所以我就使用它。谢谢你的建议。我将尝试原始https握手过程。
m_socket.set_verify_mode(boost::asio::ssl::verify_none);
m_socket.set_verify_callback([](auto&& preverified, auto&& ctx)
{
    char subject_name[256];
    X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle());
    X509_NAME_oneline(X509_get_subject_name(cert), subject_name, 256);
    return preverified;
});

m_socket.async_handshake(boost::asio::ssl::stream_base::client,
        boost::bind(&ClientSocket::HandleHandShake, this,
            boost::asio::placeholders::error, shared_from_this()));