bool doRequest(Poco::Net::HTTPClientSession & session, string requestBody, Poco::Net::HTTPRequest & request, Poco::Net::HTTPResponse & response) { session.setKeepAlive(true); request.setKeepAlive(true); request.setContentType("application/x-www-form-urlencoded"); request.setContentLength(requestBody.length()); session.sendRequest(request) << requestBody; std::istream& rs = session.receiveResponse(response); std::cout << response.getStatus() << " " << response.getReason() << std::endl; if (response.getStatus() != Poco::Net::HTTPResponse::HTTP_UNAUTHORIZED) { //std::ofstream ofs("Poco_banner.jpg", std::fstream::binary); //StreamCopier::copyStream(rs, ofs); // Print to standard output cout << "RECEIVED:" << endl; //std::copy(std::istream_iterator<char>(rs), std::istream_iterator<char>(), std::ostream_iterator<char>(std::cout)); string received = ""; string temp; //rec << rs.rdbuf(); while (std::getline(rs, temp)) { received += temp + "\n"; } cout << received << endl; return true; } else { //it went wrong ? return false; } }
void HttpAssetTransfer::SendHttpPostAssetRequest(const std::string &host, const std::string &json_data) { std::string ASSET_UPLOADING_CONTENT_TYPE = "application/json"; int content_length = json_data.length(); std::istringstream stream(json_data); int send_count = 0; //\todo make member var Poco::URI uri(host); std::string path(uri.getPathAndQuery()); if (path.empty()) path = "/"; http_session_.setHost(uri.getHost()); http_session_.setPort(uri.getPort()); Poco::Timespan time_out(HTTP_TIMEOUT_MS*1000); Poco::Net::HTTPRequest request; request.setMethod(Poco::Net::HTTPRequest::HTTP_POST); std::string t = uri.toString(); request.setURI(uri.getPath()); request.setVersion(Poco::Net::HTTPMessage::HTTP_1_1); request.setContentType(ASSET_UPLOADING_CONTENT_TYPE); request.setContentLength(content_length); request.setKeepAlive(false); try { std::ostream &request_body = http_session_.sendRequest(request); request_body.write(json_data.c_str(), json_data.length()); std::istream &s = http_session_.receiveResponse(http_response_); Poco::Net::HTTPResponse::HTTPStatus status = http_response_.getStatus(); switch (status) { case Poco::Net::HTTPResponse::HTTP_OK: response_stream_ = &s; response_size_ = http_response_.getContentLength(); break; default: std::string reason = http_response_.getReasonForStatus(status); std::stringstream error; error << "Http POST failed for: "; error << host << std::endl; error << "Reason: " << reason; AssetModule::LogError(error.str()); failed_ = true; return; } } catch (Poco::Net::MessageException &e) { std::string u = request.getURI(); std::string m = request.getMethod(); std::string error = e.message(); } catch (Poco::Exception &e) { std::stringstream error; error << "Http POST failed for: "; error << host << std::endl; error << "Reason: " << e.displayText(); AssetModule::LogError(error.str()); failed_ = true; return; } }