I am trying to upload a file using libcurl, but it does not seem to authenticate the connection to my server. I tried using ftp://username: password@example.com / , but to no avail. This is my code:
#include <stdio.h> #include <string.h> #include <curl/curl.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> #ifdef WIN32 #include <io.h> #else #include <unistd.h> #endif #define LOCAL_FILE "C:/myfile.txt" #define UPLOAD_FILE_AS "file.txt" #define REMOTE_URL "ftp://example.com/" UPLOAD_FILE_AS #define RENAME_FILE_TO "file.txt" static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream) { curl_off_t nread; size_t retcode = fread(ptr, size, nmemb, (FILE *) stream); nread = (curl_off_t) retcode; fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T " bytes from filen", nread); return retcode; } int main(void) { CURL *curl; CURLcode res; FILE *hd_src; struct stat file_info; curl_off_t fsize; struct curl_slist *headerlist = NULL; static const char buf_1[] = "RNFR " UPLOAD_FILE_AS; static const char buf_2[] = "RNTO " RENAME_FILE_TO; if (stat(LOCAL_FILE, &file_info)) { printf("Couldnt open '%s': %sn", LOCAL_FILE, strerror(errno)); return 1; } fsize = (curl_off_t) file_info.st_size; printf("Local file size: %" CURL_FORMAT_CURL_OFF_T " bytes.n", fsize); hd_src = fopen(LOCAL_FILE, "rb"); curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if (curl) { headerlist = curl_slist_append(headerlist, buf_1); headerlist = curl_slist_append(headerlist, buf_2); curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); curl_easy_setopt(curl, CURLOPT_URL, REMOTE_URL); curl_easy_setopt(curl, CURLOPT_POSTQUOTE, headerlist); curl_easy_setopt(curl, CURLOPT_READDATA, hd_src); curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t) fsize); res = curl_easy_perform(curl); curl_slist_free_all(headerlist); /* always cleanup */ curl_easy_cleanup(curl); } fclose(hd_src); /* close the local file */ curl_global_cleanup(); return 0; }
ash-breeze
source share