-
-
Save nomissbowling/3af72addc677b18818d94ce800d0b1a3 to your computer and use it in GitHub Desktop.
[cURL]コールバック関数を利用してURLの内容をバッファに溜め込む
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
/* $ gcc -Wall -g [-DDEBUG] curl_writefunction.c -lcurl */ | |
/* $ ./a.out [URL] */ | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <curl/curl.h> | |
#define BUFFER_MAX 0x10000 | |
size_t write_length = 0; | |
size_t recvf(void *ptr, size_t size, size_t nmemb, void *userp) | |
{ | |
size_t written = size*nmemb; | |
#ifdef DEBUG | |
fprintf(stderr, "recvf(ptr=%p, size=%zd, nmemb=%zd, userp=%p); length=%zd\n", | |
ptr, size, nmemb, userp, write_length); | |
#endif | |
if ((write_length + written) >= BUFFER_MAX) { return 0; } | |
// fwrite(ptr, size, nmemb, (FILE *)userp); | |
memcpy((userp + write_length), ptr, written); | |
// strlcat(userp, ptr, BUFFER_MAX); | |
// strncat(userp, ptr, written); | |
write_length += written; | |
return written; | |
} | |
int main(int argc, char **argv) | |
{ | |
CURL *curl = curl_easy_init(); | |
CURLcode res; | |
char write_data[BUFFER_MAX+1] = {'\0'}; | |
char *url = "http://www.newlisp.org/"; | |
if (argv[1] != NULL) { | |
url = argv[1]; | |
} | |
curl_easy_setopt(curl, CURLOPT_URL, url); | |
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1); | |
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &write_data); | |
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, recvf); | |
res = curl_easy_perform(curl); | |
if (res != CURLE_OK) { | |
printf("ERR: %s\n", curl_easy_strerror(res)); | |
} else { | |
printf("WRITEDATA=[text]%s[/text]\n", write_data); | |
printf("LENGTH=%zd / %d\n", write_length, BUFFER_MAX); | |
// or strlen(write_data) | |
} | |
curl_easy_cleanup(curl); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment