프로그래밍 팁

boost asio http client post form

바보 악마 2019. 10. 15. 11:33

         try
         {
             using boost::asio::ip::tcp;
             boost::asio::io_service io_service;
 
             // Get a list of endpoints corresponding to the server name.
             tcp::resolver resolver(io_service);
             tcp::resolver::query query("www.zzz.co.kr", "http");
             tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
             tcp::resolver::iterator end;
 
             // Try each endpoint until we successfully establish a connection.
             tcp::socket socket(io_service);
             boost::system::error_code error = boost::asio::error::host_not_found;
             while (error && endpoint_iterator != end)
             {
                 socket.close();
                 socket.connect(*endpoint_iterator++, error);
             }
             if (error)
                 throw boost::system::system_error(error);
 
 
 
             std::string contents = UrlEncode("id1") + "=" + UrlEncode("content1");
             contents += "&" + UrlEncode("id2") + "=" + UrlEncode("content2");
             contents += "&" + UrlEncode("id3") + "=" + UrlEncode("content3");
             contents += "&" + UrlEncode("id4") + "=" + UrlEncode("content4");
 
 
             boost::asio::streambuf request;
             std::ostream request_stream(&request);
             request_stream << "Post " << "/api/logs" << " HTTP/1.0\r\n";
             request_stream << "Host: " << "www.zzz.co.kr" << "\r\n";
             request_stream << "Accept-Charset: UTF-8" << "\r\n";
             request_stream << "Content-Type: application/x-www-form-urlencoded;charset=UTF-8\r\n";
             request_stream << "Accept: */*\r\n";
             request_stream << "Content-Length: " << contents.length() << "\r\n";
             request_stream << "Connection: close\r\n\r\n";
             request_stream << contents;
 
 
 
             // Send the request.
             boost::asio::write(socket, request);
 
             // Read the response status line. The response streambuf will automatically
             // grow to accommodate the entire line. The growth may be limited by passing
             // a maximum size to the streambuf constructor.
             boost::asio::streambuf response;
             boost::asio::read_until(socket, response, "\r\n");
 
             // Check that response is OK.
             std::istream response_stream(&response);
             std::string http_version;
             response_stream >> http_version;
             unsigned int status_code;
             response_stream >> status_code;
             std::string status_message;
             std::getline(response_stream, status_message);
             if (!response_stream || http_version.substr(0, 5) != "HTTP/")
             {
                 std::cout << "Invalid response" << std::endl;
                 return;
             }
             if (status_code != 200)
             {
                 std::cout << "Response returned with status code " << status_code << std::endl;
                 return;
             }
         }
         catch (std::exception& e)
         {
             std::cout << "Exception: " << e.what() << std::endl;
         }

'프로그래밍 팁' 카테고리의 다른 글

c++ basic  (0) 2020.12.04
boost beast http client post form  (0) 2019.10.17
CMD ERRORLEVEL & ^  (0) 2019.04.19
GPGS  (0) 2019.04.15
모바일 사운드 최적화  (0) 2018.05.17