C Чтобы скачать Zip-файл с GitHub - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу скачать zip репозитория GitHub, который не имеет zip.Это только папки и файлы.Если я перейду по URL-адресу в моем веб-браузере, он загрузит zip-файл, и если я использую wget url, он загрузит zip-файл, но выполнение приведенного ниже сценария C не загрузит zip-файл для меня.

Почемуэтот скрипт не скачать файл zip?

#include <stdio.h>
#include <curl/curl.h>

int main(void)
{
    CURL *curl;
    CURLcode res;

    curl_global_init(CURL_GLOBAL_DEFAULT);

    curl = curl_easy_init();
    if(curl) {
        curl_easy_setopt(curl, CURLOPT_URL, "https://github.com/miketheknight2016/SXOS_Cheats/archive/master.zip");
        curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
        curl_easy_perform(curl);

        res = curl_easy_perform(curl);
        if(res != CURLE_OK)
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(res));

        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();

    return 0;
}

1 Ответ

0 голосов
/ 19 февраля 2019

Если вы не укажете curl, где сохранить загружаемый файл, он выведет его на консоль.То, что вы видите, - это zip-файл, распечатанный в консоли.

Если вы хотите сохранить вывод в файл, вы должны создать функцию, которая записывает в файл набор данных, искажите curl использовать эту функцию, используя CURL_OPT_WRITEFUNCTION и CURL_OPT_WRITEDATA:

// before main
static size_t write_data_to_file(void *ptr, size_t size, size_t nmemb, void *stream)
{
    return fwrite(ptr, size, nmemb, (FILE *)stream);
}

// in main before curl_easy_perform
FILE *file = fopen("myfile.zip", "wb");
// you should probably check if file is null here - that would mean it failed to open the file
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, file);

// in main after curl_easy_perform
fclose(file);

Не спрашивайте меня, как это считается "простым".

...