X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=projects%2FGDE_API_CPP%2Fapi%2Fsrc%2FHttpConnection.cpp;h=b07bc72e479a087115371fa2b8be08baa78daba6;hb=686d4da30003d4539b1b4bda72880c3a49a6faa3;hp=32a8e18e5ca3ea77cca27495c9bcb5d87c05dd24;hpb=fc210f529eb4e781353028e34c2e8c77fba19d6a;p=modules%2Fgde.git diff --git a/projects/GDE_API_CPP/api/src/HttpConnection.cpp b/projects/GDE_API_CPP/api/src/HttpConnection.cpp index 32a8e18..b07bc72 100644 --- a/projects/GDE_API_CPP/api/src/HttpConnection.cpp +++ b/projects/GDE_API_CPP/api/src/HttpConnection.cpp @@ -7,11 +7,12 @@ #include #include +#include using namespace Poco::Net; -gde::HttpConnection::HttpConnection(Poco::URI uri) - : _path("/") +gde::HttpConnection::HttpConnection(Poco::URI uri, const Credentials& cred) + : _path("/"), _credentials(cred) { try { _session.setHost(uri.getHost()); @@ -40,33 +41,42 @@ gde::HttpConnection::~HttpConnection() // 6. CommandResultTO --> (json) response gde::CommandResultTO -gde::HttpConnection::_processRequest(const HTTPRequest& request, - const std::string& requestBody) +gde::HttpConnection::_processRequest(const std::string& method, + const CommandTO& cto) { int code = CommandResultTO::OK; std::string message = ""; std::string data = ""; - std::cout << "processRequest: body = " << requestBody << std::endl; + std::string requestBody = cto.toJson(); try { - std::cout << "Sending request...\n"; + HTTPRequest request(method, _path, HTTPMessage::HTTP_1_1); + + // Authenticating + std::stringstream ss; + Poco::Base64Encoder b64enc(ss); + b64enc << _credentials.getLogin() << ":" << _credentials.getPassword(); // user::password + b64enc.close(); + request.set("Authorization" , "Basic "+ss.str()); + + // Sending request + request.setContentLength(requestBody.length()); std::ostream& os = _session.sendRequest((HTTPRequest&)request); // Send request body, if any if (!requestBody.empty()) { - std::istringstream iss(requestBody); - Poco::StreamCopier::copyStream((std::istream&)iss, os); + //std::istringstream iss(requestBody); + //Poco::StreamCopier::copyStream((std::istream&)iss, os); + os << requestBody; } - std::cout << "Getting response...\n"; // Get response HTTPResponse response; std::istream& rs = _session.receiveResponse(response); - std::cout << response.getStatus() << " " << response.getReason() << std::endl; + //std::cout << response.getStatus() << " " << response.getReason() << std::endl; std::ostringstream responseBody; Poco::StreamCopier::copyStream(rs, responseBody); // responseBody contains a CommandResultTO in json format - std::cout << "Returning result...\n"; return CommandResultTO::fromJson(responseBody.str()); } catch (Poco::Exception& e) { std::cerr << e.displayText() << std::endl; @@ -77,13 +87,11 @@ gde::HttpConnection::_processRequest(const HTTPRequest& request, gde::CommandResultTO gde::HttpConnection::doGet(const CommandTO& cto) { - HTTPRequest request(HTTPRequest::HTTP_GET, _path, HTTPMessage::HTTP_1_1); - return _processRequest(request, cto.getData()); + return _processRequest(HTTPRequest::HTTP_GET, cto); } gde::CommandResultTO gde::HttpConnection::doPost(const CommandTO& cto) { - HTTPRequest request(HTTPRequest::HTTP_POST, _path, HTTPMessage::HTTP_1_1); - return _processRequest(request, cto.getData()); + return _processRequest(HTTPRequest::HTTP_POST, cto); }