使用有效的 HTTP 请求填充 SSL 流的 C++ 库

C++ library to populate SSL stream with valid HTTP requests

我正在使用 Boost.Asio ssl streams,并获得了一个可用的加密套接字,我可以从中发送和接收字节。

我使用以下代码成功执行了 GET 请求:

// Construct HTTP request (using vanilla std::ostream)
std::ostream request_stream(&request);
request_stream << "GET  / HTTP/1.0\r\n";
request_stream << "Host: " << argv[1] << "\r\n";
...
// Send request
ssl::stream<tcp::socket> socket
boost::asio::write(socket, request);

我现在 喜欢 找到一个小型 C++ 库,它将提供一种 使 ostream 加载有效 HTTP 请求的简便方法 !

由于您已经在使用 Boost.Asio,请考虑使用 Boost.Beast,这是一个 low-level HTTP 库。使用 Boost.Beast:

发送 GET 请求的示例
using namespace boost::beast;

// Set up an HTTP GET request message
http::request<http::empty_body> req{http::verb::get, "/", 11};
req.set(http::field::host, "www.example.com");
req.set(http::field::user_agent, "Beast/1.0);

// Send the HTTP request to the remote host
http::write(socket, req);

完整示例在这里: https://github.com/boostorg/beast/blob/master/example/http/client/sync/http_client_sync.cpp

Beast 在 Boost 1.66 及更高版本中可用。这是文档页面,其中包含许多示例: http://www.boost.org/doc/libs/1_66_0/libs/beast/doc/html/index.html

如果您真的想要将 HTTP 请求写入 std::ostream,Beast 支持 operator<< HTTP 消息(主要用于调试) ,但我认为您最好直接使用 Beast 将其写入 ip::tcp::socketssl::stream