Загрузите файл с помощью libcurl в C/C++

Это - понятие довольно высокого уровня абстракции. Центральное понятие - то, что ESB обеспечивает промежуточное программное обеспечение и интерфейсы, которые позволяют компаниям соединять свои приложения, не пишущий код.

Это могло включать посредничество для согласования несовместимых протоколов, данных и взаимодействия.

идея центральной шины, которой все передает, дает возможность для дополнительных слоев абстракции. Используя промышленные стандарты для "включения" других приложений, клиентов, и такой в эту шину делает его так, чтобы, соединяя новые сервисы, источники данных, клиенты с разрозненными потребностями были относительно легки.

Фактическая реализация

До фактической реализации, это - домен компаний поддержки очень крупного предприятия. В то время как это очень buzzwordy, целью является идеал, который на некотором небольшом уровне может быть понят через сравнение с Интернетом:

Подобие Интернету

Одна большая коммуникационная шина с широко различным использованием и данными, но всем выполнением стандартизирует протоколы.

можно, на самом деле, записать HTTP в коннектор FTP, который позволил бы браузерам получать доступ к FTP-сайтам, не вызов клиент FTP (обычно встраиваемый в браузер теперь).

Мэшапы

Мэшапы демонстрируют, что интересная реализация - берет некоторые данные маршрутов шины от полномочий Сан-Франциско, карту от Google и местоположения суши-бара от Yahoo с оценками и выполняет простой запрос, который дает Вам самый близкий суши-бар, взвешивая его так, чтобы Вы были бы готовы путешествовать немного далее для лучшей панели.

Все совершенно другие сервисы, несовместимые собой, но использующий стандартные разъемы (каналы Yahoo, например), они могут быть сплочены в связное и полезное целое.

-Adam

54
задан Volkan Güven 15 February 2016 в 12:06
поделиться

1 ответ

Используемый вами пример неверен. См. Страницу руководства для easy_setopt . В примере write_data использует свой собственный ФАЙЛ, * outfile, а не fp, указанный в CURLOPT_WRITEDATA. Вот почему закрытие fp вызывает проблемы - он даже не открывается.

Примерно так оно и должно выглядеть (здесь нет libcurl для тестирования)

#include <stdio.h>
#include <curl/curl.h>
/* For older cURL versions you will also need 
#include <curl/types.h>
#include <curl/easy.h>
*/
#include <string>

size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) {
    size_t written = fwrite(ptr, size, nmemb, stream);
    return written;
}

int main(void) {
    CURL *curl;
    FILE *fp;
    CURLcode res;
    char *url = "http://localhost/aaa.txt";
    char outfilename[FILENAME_MAX] = "C:\\bbb.txt";
    curl = curl_easy_init();
    if (curl) {
        fp = fopen(outfilename,"wb");
        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
        res = curl_easy_perform(curl);
        /* always cleanup */
        curl_easy_cleanup(curl);
        fclose(fp);
    }
    return 0;
}

Обновлено: как было предложено @rsethc types.h и easy.h больше не присутствуют в текущих версиях cURL.

194
ответ дан 7 November 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: