fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <curl/curl.h>
  4.  
  5. // Struct to store HTTP response data
  6. struct MemoryBuffer {
  7. char *data;
  8. size_t size;
  9. };
  10.  
  11. // Callback to write received data into MemoryBuffer
  12. static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) {
  13. size_t realsize = size * nmemb;
  14. struct MemoryBuffer *mem = (struct MemoryBuffer *)userp;
  15.  
  16. char *ptr = realloc(mem->data, mem->size + realsize + 1);
  17. if (!ptr) {
  18. fprintf(stderr, "Memory allocation failed\n");
  19. return 0;
  20. }
  21.  
  22. mem->data = ptr;
  23. memcpy(&(mem->data[mem->size]), contents, realsize);
  24. mem->size += realsize;
  25. mem->data[mem->size] = 0; // Null-terminate
  26.  
  27. return realsize;
  28. }
  29.  
  30. int main(int argc, char *argv[]) {
  31. if (argc != 2) {
  32. fprintf(stderr, "Usage: %s <URL>\n", argv[0]);
  33. return 1;
  34. }
  35.  
  36. CURL *curl;
  37. CURLcode res;
  38. struct MemoryBuffer chunk = {0};
  39.  
  40. curl_global_init(CURL_GLOBAL_DEFAULT);
  41. curl = curl_easy_init();
  42.  
  43. if (curl) {
  44. curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
  45. curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
  46. curl_easy_setopt(curl, CURLOPT_WRITEDATA, &chunk);
  47. curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0");
  48.  
  49. res = curl_easy_perform(curl);
  50.  
  51. if (res != CURLE_OK) {
  52. fprintf(stderr, "Request failed: %s\n", curl_easy_strerror(res));
  53. } else {
  54. printf("Fetched %zu bytes:\n%s\n", chunk.size, chunk.data);
  55. }
  56.  
  57. curl_easy_cleanup(curl);
  58. free(chunk.data);
  59. }
  60.  
  61. curl_global_cleanup();
  62. return 0;
  63. }
Success #stdin #stdout 0.03s 25960KB
stdin
Standard input is empty
stdout
#include <stdio.h>
#include <stdlib.h>
#include <curl/curl.h>

// Struct to store HTTP response data
struct MemoryBuffer {
    char *data;
    size_t size;
};

// Callback to write received data into MemoryBuffer
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) {
    size_t realsize = size * nmemb;
    struct MemoryBuffer *mem = (struct MemoryBuffer *)userp;

    char *ptr = realloc(mem->data, mem->size + realsize + 1);
    if (!ptr) {
        fprintf(stderr, "Memory allocation failed\n");
        return 0;
    }

    mem->data = ptr;
    memcpy(&(mem->data[mem->size]), contents, realsize);
    mem->size += realsize;
    mem->data[mem->size] = 0; // Null-terminate

    return realsize;
}

int main(int argc, char *argv[]) {
    if (argc != 2) {
        fprintf(stderr, "Usage: %s <URL>\n", argv[0]);
        return 1;
    }

    CURL *curl;
    CURLcode res;
    struct MemoryBuffer chunk = {0};

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &chunk);
        curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcurl-agent/1.0");

        res = curl_easy_perform(curl);
        
        if (res != CURLE_OK) {
            fprintf(stderr, "Request failed: %s\n", curl_easy_strerror(res));
        } else {
            printf("Fetched %zu bytes:\n%s\n", chunk.size, chunk.data);
        }

        curl_easy_cleanup(curl);
        free(chunk.data);
    }

    curl_global_cleanup();
    return 0;
}