Created
March 27, 2020 11:32
-
-
Save saiury92/834d3d3a4609746ccdac260fd5c8ba73 to your computer and use it in GitHub Desktop.
This file contains 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
#include <stdio.h> | |
#include <curl/curl.h> | |
/* | |
* This is an example showing how to get a single file from an FTP server. | |
* It delays the actual destination file creation until the first write | |
* callback so that it won't create an empty file in case the remote file | |
* doesn't exist or something else fails. | |
*/ | |
struct FtpFile { | |
const char *filename; | |
FILE *stream; | |
}; | |
static size_t my_fwrite(void *buffer, size_t size, size_t nmemb, void *stream) | |
{ | |
struct FtpFile *out=(struct FtpFile *)stream; | |
if(out && !out->stream) { | |
/* open file for writing */ | |
out->stream=fopen(out->filename, "wb"); | |
if(!out->stream) | |
return -1; /* failure, can't open file to write */ | |
} | |
return fwrite(buffer, size, nmemb, out->stream); | |
} | |
int main(void) | |
{ | |
CURL *curl; | |
CURLcode res; | |
struct FtpFile ftpfile={ | |
"/tmp/temp_file.txt", /* name to store the file as if succesful */ | |
NULL | |
}; | |
curl_global_init(CURL_GLOBAL_DEFAULT); | |
curl = curl_easy_init(); | |
if(curl) { | |
/* | |
* You better replace the URL with one that works! | |
*/ | |
curl_easy_setopt(curl, CURLOPT_URL, | |
"https://gist.githubusercontent.com/saiury92/035488985db79bc09037c7182da1f9e3/raw/1e271e956c0c8699ef1ee95e400afc821e25528a/girl.txt"); | |
/* Define our callback to get called when there's data to be written */ | |
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite); | |
/* Set a pointer to our struct to pass to the callback */ | |
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &ftpfile); | |
/* Switch on full protocol/debug output */ | |
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); | |
res = curl_easy_perform(curl); | |
/* always cleanup */ | |
curl_easy_cleanup(curl); | |
if(CURLE_OK != res) { | |
/* we failed */ | |
fprintf(stderr, "curl told us %d\n", res); | |
} | |
} | |
if(ftpfile.stream) | |
fclose(ftpfile.stream); /* close the local file */ | |
curl_global_cleanup(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment