|
@@ -3,69 +3,69 @@
|
|
|
// Borrowed from https://curl.haxx.se/libcurl/c/getinmemory.html
|
|
|
|
|
|
static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) {
|
|
|
- size_t realsize = size * nmemb;
|
|
|
- struct MemoryStruct *mem = (struct MemoryStruct *)userp;
|
|
|
-
|
|
|
- mem->memory = realloc(mem->memory, mem->size + realsize + 1);
|
|
|
- if(mem->memory == NULL)
|
|
|
- return 0;
|
|
|
-
|
|
|
- memcpy(&(mem->memory[mem->size]), contents, realsize);
|
|
|
- mem->size += realsize;
|
|
|
- mem->memory[mem->size] = 0;
|
|
|
-
|
|
|
- return realsize;
|
|
|
+ size_t realsize = size * nmemb;
|
|
|
+ struct MemoryStruct *mem = (struct MemoryStruct *)userp;
|
|
|
+
|
|
|
+ mem->memory = realloc(mem->memory, mem->size + realsize + 1);
|
|
|
+ if(mem->memory == NULL)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ memcpy(&(mem->memory[mem->size]), contents, realsize);
|
|
|
+ mem->size += realsize;
|
|
|
+ mem->memory[mem->size] = 0;
|
|
|
+
|
|
|
+ return realsize;
|
|
|
}
|
|
|
|
|
|
char *getData(char *url) {
|
|
|
- CURL *curl_handle;
|
|
|
- CURLcode res;
|
|
|
-
|
|
|
- struct MemoryStruct chunk;
|
|
|
-
|
|
|
- chunk.memory = malloc(1); /* will be grown as needed by the realloc above */
|
|
|
- chunk.size = 0; /* no data at this point */
|
|
|
-
|
|
|
- curl_global_init(CURL_GLOBAL_ALL);
|
|
|
-
|
|
|
- /* init the curl session */
|
|
|
- curl_handle = curl_easy_init();
|
|
|
-
|
|
|
- /* specify URL to get */
|
|
|
- curl_easy_setopt(curl_handle, CURLOPT_URL, url);
|
|
|
-
|
|
|
- curl_easy_setopt(curl_handle, CURLOPT_NOPROXY, "*");
|
|
|
-
|
|
|
- /* send all data to this function */
|
|
|
- curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
|
|
|
-
|
|
|
- /* we pass our 'chunk' struct to the callback function */
|
|
|
- curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
|
|
|
-
|
|
|
- /* some servers don't like requests that are made without a user-agent
|
|
|
- field, so we provide one */
|
|
|
- curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
|
|
|
-
|
|
|
- /* get it! */
|
|
|
- res = curl_easy_perform(curl_handle);
|
|
|
-
|
|
|
- /* check for errors */
|
|
|
- if(res != CURLE_OK) {
|
|
|
- fprintf(stderr, "curl_easy_perform() failed: %s\n",
|
|
|
- curl_easy_strerror(res));
|
|
|
- }
|
|
|
-
|
|
|
- size_t dataSize = strlen(chunk.memory);
|
|
|
- char *data = calloc(dataSize + 1, 1);
|
|
|
- data = strncpy(data, chunk.memory, dataSize);
|
|
|
-
|
|
|
- /* cleanup curl stuff */
|
|
|
- curl_easy_cleanup(curl_handle);
|
|
|
-
|
|
|
- free(chunk.memory);
|
|
|
-
|
|
|
- /* we're done with libcurl, so clean it up */
|
|
|
- curl_global_cleanup();
|
|
|
-
|
|
|
- return data;
|
|
|
+ CURL *curl_handle;
|
|
|
+ CURLcode res;
|
|
|
+
|
|
|
+ struct MemoryStruct chunk;
|
|
|
+
|
|
|
+ chunk.memory = malloc(1); /* will be grown as needed by the realloc above */
|
|
|
+ chunk.size = 0; /* no data at this point */
|
|
|
+
|
|
|
+ curl_global_init(CURL_GLOBAL_ALL);
|
|
|
+
|
|
|
+ /* init the curl session */
|
|
|
+ curl_handle = curl_easy_init();
|
|
|
+
|
|
|
+ /* specify URL to get */
|
|
|
+ curl_easy_setopt(curl_handle, CURLOPT_URL, url);
|
|
|
+
|
|
|
+ curl_easy_setopt(curl_handle, CURLOPT_NOPROXY, "*");
|
|
|
+
|
|
|
+ /* send all data to this function */
|
|
|
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
|
|
|
+
|
|
|
+ /* we pass our 'chunk' struct to the callback function */
|
|
|
+ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
|
|
|
+
|
|
|
+ /* some servers don't like requests that are made without a user-agent
|
|
|
+ field, so we provide one */
|
|
|
+ curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");
|
|
|
+
|
|
|
+ /* get it! */
|
|
|
+ res = curl_easy_perform(curl_handle);
|
|
|
+
|
|
|
+ /* check for errors */
|
|
|
+ if(res != CURLE_OK) {
|
|
|
+ fprintf(stderr, "curl_easy_perform() failed: %s\n",
|
|
|
+ curl_easy_strerror(res));
|
|
|
+ }
|
|
|
+
|
|
|
+ size_t dataSize = strlen(chunk.memory);
|
|
|
+ char *data = calloc(dataSize + 1, 1);
|
|
|
+ data = strncpy(data, chunk.memory, dataSize);
|
|
|
+
|
|
|
+ /* cleanup curl stuff */
|
|
|
+ curl_easy_cleanup(curl_handle);
|
|
|
+
|
|
|
+ free(chunk.memory);
|
|
|
+
|
|
|
+ /* we're done with libcurl, so clean it up */
|
|
|
+ curl_global_cleanup();
|
|
|
+
|
|
|
+ return data;
|
|
|
}
|