Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > cURL и FTP


Автор: Verus 10.10.2008, 19:11
Приведите пожалуйста пример кода, как с помощью cURL залить на FTP сервер файл. Весь инет изрыл, а так и не нашел. Спасибо.

Автор: MAKCim 10.10.2008, 22:19
Цитата(Verus @  10.10.2008,  19:11 Найти цитируемый пост)
Весь инет изрыл, а так и не нашел

извините, но это глупость

Автор: Verus 10.10.2008, 23:07
Вот какой код я использую. Файл не заливается.
Код

CURLcode geturl()
{
    CURL *curl;
    CURLcode res;
    curl = curl_easy_init();
    if(curl)
    {
        long size;
        FILE* fp = fopen("text", "r");

                char url[] = "ftp://login:[email protected]:21";
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_UPLOAD, 1);
                curl_easy_setopt(curl, CURLOPT_INFILE, fp);
                curl_easy_setopt(curl, CURLOPT_INFILESIZE, size);

        res = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
        fclose(fp);
    }

    return res;
}

Автор: MAKCim 10.10.2008, 23:16
size не инициализирован
вместо INFILE используй READDATA

Добавлено через 1 минуту и 34 секунды
Verus
покажи вывод strace при выполнении кода

Автор: Verus 10.10.2008, 23:32
Переделал на это. Взято http://curl.haxx.se/lxr/source/docs/examples/ftpupload.c 
возвращает код 3. В логах сервера написано что пользователь вошел и тут же сессия закрыта.
Код

CURLcode geturl()
{
    CURL *curl;
    CURLcode res;
    curl = curl_easy_init();
    if(curl)
    {
        long size;
        FILE* fp = fopen("text", "rb");
        fseek (fp, 0, SEEK_END);
        size=ftell(fp);
        rewind(fp);
        char url[] = "ftp://root:[email protected]:21";
        curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
        curl_easy_setopt(curl,CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_READDATA, fp);
        curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, size);
        res = curl_easy_perform(curl);
        fclose(fp);
    }
    curl_easy_cleanup(curl);
    return res;
}

Автор: MAKCim 10.10.2008, 23:38
Verus
ты вроде как в url не указываешь файл

Автор: Verus 10.10.2008, 23:40
Спасибо большое, это помогло smile

Добавлено через 4 минуты и 41 секунду
Можно еще вопрос? smile
Мне необходимо залить много каталогов и в них пофайлу еще. Как это можно реализовать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)