#pragma once #include "curl/curl.h" #include "transport/Logging.h" #include "transport/ThreadPool.h" #include #include #include #include "rapidjson/document.h" #include namespace Transport { class HTTPRequest : public Thread { public: typedef enum { Get } Type; typedef boost::function< void (HTTPRequest *, bool, rapidjson::Document &json, const std::string &data) > Callback; HTTPRequest(ThreadPool *tp, Type type, const std::string &url, Callback callback); HTTPRequest(Type type, const std::string &url); virtual ~HTTPRequest(); void setProxy(std::string, std::string, std::string, std::string); bool execute(); bool execute(rapidjson::Document &json); std::string getError() {return std::string(curl_errorbuffer);} const std::string &getRawData() { return m_data; } void run(); void finalize(); const std::string &getURL() { return m_url; } boost::signal onRequestFinished; static void globalInit() { curl_global_init(CURL_GLOBAL_ALL); } static void globalCleanup() { curl_global_cleanup(); } private: bool init(); bool GET(std::string url, std::string &output); bool GET(std::string url, rapidjson::Document &json); CURL *curlhandle; char curl_errorbuffer[1024]; std::string error; std::string callbackdata; ThreadPool *m_tp; std::string m_url; bool m_ok; rapidjson::Document m_json; std::string m_data; Callback m_callback; Type m_type; static int curlCallBack(char* data, size_t size, size_t nmemb, HTTPRequest *obj); }; }