Created
August 1, 2011 18:46
-
-
Save kosh04/1118742 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; | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sample: