33 #ifndef _IDENTT_HTTP_HTTPCLIENT_HPP_ 34 #define _IDENTT_HTTP_HTTPCLIENT_HPP_ 38 #ifdef IDENTT_BUILD_WITH_SSL 39 #include <boost/asio/ssl.hpp> 45 template<
class socket_type>
48 typedef boost::asio::ip::tcp::socket HTTP;
55 socket=std::make_shared<HTTP>(asio_io_service);
61 if(socket_error || !socket->is_open()) {
62 boost::asio::ip::tcp::resolver::query query(host, std::to_string(port));
63 boost::asio::connect(*socket, asio_resolver.resolve(query));
65 boost::asio::ip::tcp::no_delay option(
true);
66 socket->set_option(option);
73 #ifdef IDENTT_BUILD_WITH_SSL 74 typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> HTTPS;
78 HttpClient(
const std::string& server_port_path,
bool verify_certificate=
true,
79 const std::string& cert_file=std::string(),
const std::string& private_key_file=std::string(),
80 const std::string& verify_file=std::string()) :
83 if(verify_certificate)
84 asio_context.set_verify_mode(boost::asio::ssl::verify_peer);
86 asio_context.set_verify_mode(boost::asio::ssl::verify_none);
88 if(cert_file.size()>0 && private_key_file.size()>0) {
89 asio_context.use_certificate_chain_file(cert_file);
90 asio_context.use_private_key_file(private_key_file, boost::asio::ssl::context::pem);
93 if(verify_file.size()>0)
94 asio_context.load_verify_file(verify_file);
96 socket=std::make_shared<HTTPS>(asio_io_service, asio_context);
100 boost::asio::ssl::context asio_context;
104 if(socket_error || !socket->lowest_layer().is_open()) {
105 boost::asio::ip::tcp::resolver::query query(host, std::to_string(port));
106 boost::asio::connect(socket->lowest_layer(), asio_resolver.resolve(query));
108 boost::asio::ip::tcp::no_delay option(
true);
109 socket->lowest_layer().set_option(option);
111 socket->handshake(boost::asio::ssl::stream_base::client);
Definition: CryptoBase.hpp:49
Definition: HttpClientBase.hpp:44
Definition: HttpClient.hpp:46