#include #include #include #include "http.h" size_t http_savebuffer_cb(char* data, size_t size, size_t nmemb, void* clientp) { size_t realsize = size * nmemb; Response* r = (Response*)clientp; char* ptr = realloc(r->response, r->size + realsize + 1); if (!ptr) return 0; r->response = ptr; memcpy(&(r->response[r->size]), data, realsize); r->size += realsize; r->response[r->size] = '\0'; return realsize; } // make sure url is not blank! Response http_call(const char* url, enum HTTPMethod method, const char* body, struct curl_slist* headers) { Response r = {0}; CURL* curl_ctx = curl_easy_init(); if (!curl_ctx) { perror("curl init"); } curl_easy_setopt(curl_ctx, CURLOPT_URL, url); curl_easy_setopt(curl_ctx, CURLOPT_HTTPHEADER, headers); curl_easy_setopt(curl_ctx, CURLOPT_WRITEFUNCTION, http_savebuffer_cb); curl_easy_setopt(curl_ctx, CURLOPT_WRITEDATA, (void*)&r); curl_easy_setopt(curl_ctx, CURLOPT_VERBOSE, 1l); switch (method) { case GET: // nothing to be done here break; case POST: curl_easy_setopt(curl_ctx, CURLOPT_POSTFIELDS, body); break; case HEAD: //stub break; case OPTIONS: //stub break; case PUT: //stub break; case DELETE: //stub break; case CONNECT: //stub break; case TRACE: //stub break; case PATCH: //stub break; } curl_easy_perform(curl_ctx); curl_easy_cleanup(curl_ctx); return r; } struct curl_slist* http_header_maker(char** array) { struct curl_slist* headers = NULL; for (int i = 0; array[i] != NULL; i++) { headers = curl_slist_append(headers, array[i]); } return headers; } void http_init_test() { }