#include <Poco/StreamCopier.h>
#include <Poco/Net/HTTPResponse.h>
+#include <Poco/Base64Encoder.h>
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());
// 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;
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);
}