似たようなサンプルコードは沢山ある(公式にも)が、GETばかりなので。
//-------------------------------------------------------------------------------- int Connect(std::string *Body,const std::string &host,const std::string &path,const std::string &query) { try { boost::asio::io_service io_service; boost::asio::ssl::context context( io_service, boost::asio::ssl::context::sslv3_client ); boost::asio::ssl::stream< boost::asio::ip::tcp::socket > ssl_stream( io_service, context ); //resolveを使ってサイトが存在するのか確認、そして接続 ssl_stream.lowest_layer().connect( *boost::asio::ip::tcp::resolver( io_service ).resolve( boost::asio::ip::tcp::resolver::query( host, "https" ) ) ); ssl_stream.handshake( boost::asio::ssl::stream_base::client ); //requestを作成する------------------------------- boost::asio::streambuf request; std::ostream request_stream( & request ); request_stream << "POST " << path << " HTTP/1.0\r\n"; request_stream << "Host: " << host << "\r\n"; request_stream << "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n"; request_stream << "Content-Length: " << query.length() << "\r\n"; request_stream << "Connection: Close\r\n"; request_stream << "\r\n"; request_stream << query << "\r\n"; //------------------------------------------------ //リクエストの送信 boost::asio::write( ssl_stream, request ); //リクエストの受信と表示 boost::asio::streambuf response; boost::asio::read_until(ssl_stream, response, "\r\n"); std::istream response_stream(&response); std::string http_version; response_stream >> http_version; unsigned int status_code; response_stream >> status_code; boost::system::error_code error; while( boost::asio::read( ssl_stream, response, boost::asio::transfer_at_least(1), error ) ) *Body = boost::asio::buffer_cast<const char*>(response.data()); std::size_t pos = Body->find("\r\n\r\n"); if (pos != std::string::npos) { *Body = Body->substr(pos + 4); } return status_code; } catch (...) { return -1; } }
host,path,queryを入れるとbodyに結果を返してくれる単純な関数。戻り値はレスポンスコード(何事もなく成功なら200)。
おまじないが沢山あるけどググればその理由が出てくるハズ。
ちなみにこのままでは同期通信しかできないので、外で別スレッド化してぶん回す(ハトクラPCはそれ)か、公式を見ながら非同期用の関数を使うのが良い。