/*
to test, compile with:
g++ -std=c++11 Client.cpp HttpClient.cpp -o test
*/
#include "HttpClient.h"
#include <stdio.h>
#include <sstream>
#include "rapidjson/document.h"
using namespace rapidjson;
void ClientTest()
{
HttpRequest request = { "GET", "http://192.168.0.15:8000/servers" };
HttpResponse result = MakeHttpRequestWrapper(request);
std::map<std::string,std::string>& h = result.headers;
printf("status: %s\n", result.status.c_str());
for (std::map<std::string, std::string>::const_iterator i = h.begin(); i != h.end(); ++i)
printf("header[\"%s\"] = \"%s\"\n", i->first.c_str(), i->second.c_str());
printf("body: %s\n", result.body.data());
Document d;
std::string services_url;
if ((ParseResult)d.Parse((const char*)result.body.data())) {
services_url = d["services"].GetString();
printf("services_url = %s\n", services_url.c_str());
}
{
HttpRequest request = { "GET", "http://" + services_url + "/services" };
HttpResponse result = MakeHttpRequestWrapper(request);
std::map<std::string,std::string>& h = result.headers;
printf("status: %s\n", result.status.c_str());
for (std::map<std::string, std::string>::const_iterator i = h.begin(); i != h.end(); ++i)
printf("header[\"%s\"] = \"%s\"\n", i->first.c_str(), i->second.c_str());
printf("body: %s\n", result.body.data());
Document d;
std::string auth_url;
std::string asset_url;
if ((ParseResult)d.Parse((const char*)result.body.data())) {
auth_url = d["authentication"].GetString();
asset_url = d["assets"].GetString();
printf("auth_url = %s\n", auth_url.c_str());
}
{
HttpRequest request = { "GET", "http://" + asset_url + "/asset/blah.txt" };
HttpResponse result = MakeHttpRequestWrapper(request);
std::map<std::string,std::string>& h = result.headers;
printf("status: %s\n", result.status.c_str());
for (std::map<std::string, std::string>::const_iterator i = h.begin(); i != h.end(); ++i)
printf("header[\"%s\"] = \"%s\"\n", i->first.c_str(), i->second.c_str());
printf("body: %s\n", result.body.data());
}
{
HttpRequest request = { "GET", "http://" + auth_url + "/authenticate" };
HttpResponse result = MakeHttpRequestWrapper(request);
std::map<std::string,std::string>& h = result.headers;
printf("status: %s\n", result.status.c_str());
for (std::map<std::string, std::string>::const_iterator i = h.begin(); i != h.end(); ++i)
printf("header[\"%s\"] = \"%s\"\n", i->first.c_str(), i->second.c_str());
printf("body: %s\n", result.body.data());
Document d;
if ((ParseResult)d.Parse((const char*)result.body.data())) {
std::string access_token = d["token"].GetString();
printf("token = %s\n", access_token.c_str());
}
MakeAsyncHttpRequestWrapper(request);
}
}
}
// Test case
int main(int argc, char *argv[])
{
if (argc >= 2)
{
std::vector<uint8_t> response;
std::map<std::string,std::string> args;
int res = MakeSyncHttpRequest(response, "GET", argv[1], args);
if (response.data())
printf("%s\n", response.data());
return res;
}
else
{
ClientTest();
}
return 0;
}