|
|
@@ -38,6 +38,8 @@
|
|
|
# include <sys/wait.h>
|
|
|
#endif
|
|
|
|
|
|
+#include "cm_curl.h"
|
|
|
+
|
|
|
#include <sys/stat.h>
|
|
|
|
|
|
#if defined(_WIN32) && \
|
|
|
@@ -2925,3 +2927,53 @@ bool cmSystemTools::CheckRPath(std::string const& file,
|
|
|
return false;
|
|
|
#endif
|
|
|
}
|
|
|
+
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+static size_t
|
|
|
+HTTPResponseCallback(void *ptr, size_t size, size_t nmemb, void *data)
|
|
|
+{
|
|
|
+ register int realsize = (int)(size * nmemb);
|
|
|
+
|
|
|
+ std::string *response
|
|
|
+ = static_cast<std::string*>(data);
|
|
|
+ const char* chPtr = static_cast<char*>(ptr);
|
|
|
+ *response += chPtr;
|
|
|
+
|
|
|
+ return realsize;
|
|
|
+}
|
|
|
+
|
|
|
+//----------------------------------------------------------------------------
|
|
|
+int cmSystemTools::HTTPRequest(std::string url, HTTPMethod method,
|
|
|
+ std::string& response,
|
|
|
+ std::string fields, int timeout)
|
|
|
+{
|
|
|
+ CURL* curl;
|
|
|
+ ::curl_global_init(CURL_GLOBAL_ALL);
|
|
|
+ curl = ::curl_easy_init();
|
|
|
+
|
|
|
+ //set request options
|
|
|
+ if(method == cmSystemTools::HTTP_GET && fields.size())
|
|
|
+ {
|
|
|
+ url += "?" + fields;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ::curl_easy_setopt(curl, CURLOPT_POST, 1);
|
|
|
+ ::curl_easy_setopt(curl, CURLOPT_POSTFIELDS, fields.c_str());
|
|
|
+ }
|
|
|
+ ::curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
|
|
|
+ ::curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
|
|
|
+ ::curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
|
|
|
+
|
|
|
+ //set response options
|
|
|
+ ::curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, HTTPResponseCallback);
|
|
|
+ ::curl_easy_setopt(curl, CURLOPT_FILE, (void *)&response);
|
|
|
+ ::curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1);
|
|
|
+
|
|
|
+ CURLcode res = ::curl_easy_perform(curl);
|
|
|
+
|
|
|
+ ::curl_easy_cleanup(curl);
|
|
|
+ ::curl_global_cleanup();
|
|
|
+
|
|
|
+ return static_cast<int>(res);
|
|
|
+}
|