我想下载一个没有zip的GitHub存储库的zip。它只是文件夹和文件。如果我在Web浏览器中导航到该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;
}
答案 0 :(得分:1)
如果您不告诉curl将下载的文件保存在何处,它将在控制台中将其打印出来。您将看到在控制台中打印出的一个zip文件。
如果希望它将输出保存到文件,则必须创建一个函数,该函数将一堆数据写入文件,并使用CURL_OPT_WRITEFUNCTION和CURL_OPT_WRITEDATA告诉curl使用该函数:
// 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);
不要问我这算什么“简单”。