【问题标题】:Determine extension when downloading a file with curl?使用 curl 下载文件时确定扩展名?
【发布时间】:2012-08-12 13:20:28
【问题描述】:

我创建了一个使用 curl 从 INTERNET 下载字幕的程序
如何知道我下载的文件的扩展名(.zip 或 .rar)?

这是我的代码(它是函数的一部分)

FILE* download=fopen("download.zip","wb");//i assume it's a zip
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_POST,1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,post_data.c_str());
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
curl_easy_setopt(curl, CURLOPT_URL,url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write2file);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, download);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
    std::cout<<"Download Failed "<<std::endl;
curl_easy_cleanup(curl);
fclose(download);

【问题讨论】:

  • 文件扩展名是服务器所说的。不是你可以轻易控制的。相反,您应该检查结果的 MIME 类型。
  • 我已经尝试通过获取标题然后对其进行解析,但到那时文件将被写入

标签: c++ curl


【解决方案1】:

您可以使用curl_easy_getinfo() 函数,它具有内容类型信息:

CURLINFO_CONTENT_TYPE

传递一个指向 char 指针的指针以接收内容类型 下载的对象。这是从 Content-Type 读取的值: 场地。如果你得到 NULL,这意味着服务器没有发送一个有效的 Content-Type 标头或使用的协议不支持。

使用这些信息,您可以通过在磁盘上重命名下载的文件来为其提供正确的扩展名。

【讨论】:

  • 我也试过了,也试过自己解析标题,但到那时我已经写了文件,假设它是一个 zip 文件
  • 不是 Curl 用户,但如果不使用 CURLOPT_WRITEDATA 和/或 CURLOPT_WRITEFUNCTION 就不能运行此功能,这样可以在不写入文件的情况下为您提供信息。或者您可以在下载后重命名磁盘上的文件。
猜你喜欢
  • 2021-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
相关资源
最近更新 更多