generated from AfonsoCMSousa/CPP-Template
Fix: Small fix for dependencies
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
#include "http_get.h"
|
||||
|
||||
// Callback for libcurl to write response into our struct
|
||||
static size_t write_callback(void *data, size_t size, size_t nmemb, void *userp) {
|
||||
size_t realsize = size * nmemb;
|
||||
struct Memory *mem = (struct Memory *)userp;
|
||||
|
||||
char *ptr = realloc(mem->response, mem->size + realsize + 1);
|
||||
if(ptr == NULL) {
|
||||
// Out of memory!
|
||||
fprintf(stderr, "realloc() failed\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
mem->response = ptr;
|
||||
memcpy(&(mem->response[mem->size]), data, realsize);
|
||||
mem->size += realsize;
|
||||
mem->response[mem->size] = '\0';
|
||||
return realsize;
|
||||
}
|
||||
|
||||
// Function: GET request, returns heap string (caller must free)
|
||||
char *http_get(const char *url) {
|
||||
CURL *curl;
|
||||
CURLcode res;
|
||||
struct Memory chunk;
|
||||
|
||||
chunk.response = malloc(1); // start with empty buffer
|
||||
chunk.size = 0;
|
||||
|
||||
curl_global_init(CURL_GLOBAL_ALL);
|
||||
curl = curl_easy_init();
|
||||
|
||||
if(curl) {
|
||||
curl_easy_setopt(curl, CURLOPT_URL, url);
|
||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // follow redirects
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
|
||||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk);
|
||||
|
||||
res = curl_easy_perform(curl);
|
||||
|
||||
if(res != CURLE_OK) {
|
||||
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
|
||||
free(chunk.response);
|
||||
chunk.response = NULL;
|
||||
}
|
||||
|
||||
curl_easy_cleanup(curl);
|
||||
}
|
||||
|
||||
curl_global_cleanup();
|
||||
return chunk.response;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
#ifndef HTTP_GET_H
|
||||
#define HTTP_GET_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <curl/curl.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// Struct to hold response data
|
||||
struct Memory {
|
||||
char *response;
|
||||
size_t size;
|
||||
};
|
||||
|
||||
// Callback for libcurl to write response into our struct
|
||||
static size_t write_callback(void *data, size_t size, size_t nmemb, void *userp);
|
||||
|
||||
// Function: GET request, returns heap string (caller must free)
|
||||
char *http_get(const char *url);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // HTTP_GET_H
|
||||
Reference in New Issue
Block a user