Back to list

libcurl - HTTP Request

Lv.51011@mukitaro1 playsDec 31, 2025

libcurl HTTP GET request with response buffering. Shows callback-based data handling in C.

preview.c
C
1#include <curl/curl.h>
2#include <string.h>
3
4struct response {
5 char *data;
6 size_t size;
7};
8
9static size_t write_callback(void *contents, size_t size,
10 size_t nmemb, void *userp)
11{
12 size_t realsize = size * nmemb;
13 struct response *resp = (struct response *)userp;
14
15 char *ptr = realloc(resp->data, resp->size + realsize + 1);
16 if (!ptr) return 0;
17
18 resp->data = ptr;
19 memcpy(&(resp->data[resp->size]), contents, realsize);
20 resp->size += realsize;
21 resp->data[resp->size] = '\0';
22
23 return realsize;
24}
25
26int http_get(const char *url, struct response *resp)
27{
28 CURL *curl = curl_easy_init();
29 if (!curl) return -1;
30
31 resp->data = malloc(1);
32 resp->size = 0;
33
34 curl_easy_setopt(curl, CURLOPT_URL, url);
35 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
36 curl_easy_setopt(curl, CURLOPT_WRITEDATA, resp);
37
38 CURLcode res = curl_easy_perform(curl);
39 curl_easy_cleanup(curl);
40
41 return (res == CURLE_OK) ? 0 : -1;
42}

Custom problems are not included in rankings