2012-05-04 26 views
7

में libcurl एफ़टीपी डाउनलोड प्रमाणीकरण मैं libcurl का उपयोग कर एक फ़ाइल अपलोड करने की कोशिश कर रहा हूं लेकिन ऐसा लगता है कि यह मेरे सर्वर से कनेक्शन प्रमाणीकृत नहीं कर रहा है। मैंने ftp://username:[email protected]/ का उपयोग करने का प्रयास किया है लेकिन इसका कोई फायदा नहीं हुआ है। यह मेरा कोड है:सी ++

#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; 
} 
+3

मैं बस अपना कोड के लिए एक जोड़ने के लिए की जरूरत:: यह विकल्प CURLOPT_USERPWD के माध्यम से किया जाता है, बस इसे इस प्रकार सेट curl_easy_setopt (कर्ल, CURLOPT_USERPWD, "उपयोगकर्ता: पासवर्ड"); –

उत्तर

8

आपको libcurl के लिए आवश्यक उपयोगकर्ता नाम और पासवर्ड पास करना होगा।

curl_easy_setopt(curl, CURLOPT_USERPWD, "username:password"); 
+1

हाल ही में libcurl में, 'ftp: // उपयोगकर्ता नाम: पासवर्ड @ example.com/'भी ठीक काम करता है। – rustyx