|
- // Build: clang -o main main.c -lcurl
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <curl/curl.h>
-
- static size_t write_callback(void *data, size_t size, size_t nmemb, void *userdata)
- {
- size_t realsize = size * nmemb;
- char *ptr = malloc(realsize + 1);
- if (ptr)
- {
- memcpy(ptr, data, realsize);
- ptr[realsize] = '\0';
- *(char **)userdata = ptr;
- }
- return realsize;
- }
-
- int main(void)
- {
- CURL *curl;
- CURLcode res;
- const char *url = "http://localhost:3000/todos";
- const char *data = "{\"text\": \"first todo\"}";
- struct curl_slist *headers = NULL;
- char error[CURL_ERROR_SIZE] = { 0 };
- long response_code;
- char *response_data;
-
- curl_global_init(CURL_GLOBAL_ALL);
-
- curl = curl_easy_init();
- if (curl)
- {
- headers = curl_slist_append(headers, "Content-Type: application/json");
- curl_easy_setopt(curl, CURLOPT_URL, url);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
- curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
- curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response_data);
- res = curl_easy_perform(curl);
- if (res != CURLE_OK) {
- printf("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
- printf("%s\n", error);
- } else {
- curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
- printf("Response code: %ld\n", response_code);
- printf("Response data: %s\n", response_data);
- free(response_data);
- }
-
- curl_easy_cleanup(curl);
- }
-
- curl_slist_free_all(headers);
-
- curl_global_cleanup();
-
- return 0;
- }
|