Created
November 30, 2016 09:32
-
-
Save ictlyh/cfeda0d9e5e1b6d83b59cdba64b3cf01 to your computer and use it in GitHub Desktop.
Demo of getting page via lib curl
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* Demo of getting page via lib curl | |
* Build: gcc curl-get.c -o curl-get -lcurl | |
* Run: ./curl-get | |
*/ | |
#include <curl/curl.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
struct url_data { | |
size_t size; | |
char* data; | |
}; | |
size_t write_data(void *ptr, size_t size, size_t nmemb, struct url_data *data) { | |
size_t n = size * nmemb; | |
free(data->data); | |
data->data = (char*) malloc (sizeof(char) * (n + 1)); | |
if (!data->data) { | |
fprintf(stdout, "Failed to allocate memory\n"); | |
return 0; | |
} | |
memcpy(data->data, ptr, n); | |
data->data[n] = '\0'; | |
return n; | |
} | |
char* handleURL(const char* url) { | |
CURL* curl; | |
CURLcode res; | |
struct url_data data; | |
data.size = 0; | |
data.data = NULL; | |
curl = curl_easy_init(); | |
if (curl) { | |
curl_easy_setopt(curl, CURLOPT_URL, url); | |
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); | |
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data); | |
res = curl_easy_perform(curl); | |
if(res != CURLE_OK) { | |
fprintf(stdout, "curl_easy_perform() failed: %s\n", | |
curl_easy_strerror(res)); | |
} | |
curl_easy_cleanup(curl); | |
} | |
return data.data; | |
} | |
int main() { | |
char url[] = "https://www.baidu.com"; | |
char* data = handleURL(url); | |
if (!data) { | |
fprintf(stdout, "Curl handle url error\n"); | |
return 1; | |
} | |
fprintf(stdout, "Content of page %s:\n%s\n", url, data); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment