1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <boost/asio.hpp>
#include <boost/asio/ssl.hpp>
#include <iostream>
int main() {
boost::system::error_code ec;
using namespace boost::asio;
// what we need
io_service svc;
ssl::context ctx(svc, ssl::context::method::sslv23_client);
ssl::stream<ip::tcp::socket> ssock(svc, ctx);
ssock.lowest_layer().connect({ {}, 8087 }); // http://localhost:8087 for test
ssock.handshake(ssl::stream_base::handshake_type::client);
// send request
std::string request("GET /newGame?name=david HTTP/1.1\r\n\r\n");
boost::asio::write(ssock, buffer(request));
// read response
std::string response;
do {
char buf[1024];
size_t bytes_transferred = ssock.read_some(buffer(buf), ec);
if (!ec) response.append(buf, buf + bytes_transferred);
} while (!ec);
// print and exit
std::cout << "Response received: '" << response << "'\n";
}
#ifdef CERTS // for the openssl server emulation - demo only
-----BEGIN CERTIFICATE-----
MIIDlzCCAn+gAwIBAgIJAMJYU3U6A0IRMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNV
BAYTAkFVMQwwCgYDVQQIEwNOU1cxDzANBgNVBAcTBlN5ZG5leTENMAsGA1UEChME
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
openssl s_server -quiet -dhparam main.cpp -cert main.cpp -accept 8087 <<< 'this could be a valid JSON response'&
clang++ -Os -std=c++11 -Wall -pthread main.cpp -lboost_system -lssl -lcrypto && ./a.out
WARNING: can't open config file: /usr/lib/ssl/openssl.cnf
bad gethostbyaddr
GET /newGame?name=david HTTP/1.1
Response received: 'this could be a valid JSON response
'