C++ 卷曲文件下载 - 错误检查
C++ Curl file download - error check
我使用以下函数从服务器下载文件。
void downloadFile(const char* url, const char* fname) {
CURL *curl;
FILE *fp;
CURLcode res;
curl = curl_easy_init();
if (curl){
fp = fopen(fname, "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);
curl_easy_cleanup(curl);
fclose(fp);
}
}
这是这样用的:
downloadFile("http://servera.com/filea.tar.gz","filea.tar.gz");
如何将错误检查添加到其中,以便如果filea.tar.gz
不可用或无法访问servera.com
,我可以显示我选择的错误消息。
更新我添加了:
cout << res;
代码,但这总是返回0
服务器返回"找不到文件"消息,并且正在下载。无论如何,围绕这个?如果找不到或无法访问指定的文件,我想收到错误。谢谢
更新以下内容现在显示人类可读的错误消息:
void downloadFile(const char* url, const char* fname) {
CURL *curl;
FILE *fp;
CURLcode res;
curl = curl_easy_init();
if (curl){
fp = fopen(fname, "wb");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curl, CURLOPT_FAILONERROR, true);
res = curl_easy_perform(curl);
cout << curl_easy_strerror(res);
curl_easy_cleanup(curl);
fclose(fp);
}
}
现在我可以得到错误代码,我应该能够更好地捕获它。感谢 @YSC & @Daniel Stenberg
>curl_easy_perform()
返回描述结果的CURLcode
。RTFM:
-
CURLE_HTTP_RETURNED_ERROR
如果CURLOPT_FAILONERROR
设置为 TRUE,并且 HTTP 服务器返回的错误代码为>= 400,则返回此值。
您需要查看 res
的值。有关所有可能的值,请参阅 curl 错误代码。如果 res 等于 CURLE_REMOTE_FILE_NOT_FOUND
,则该文件可能不可用。您还可以使用 CURLOPT_ERRORBUFFER 从 curl 获取错误消息。
如果 res 始终为 0(说CURLE_OK会更精确),那么在支持许多协议的 curl 级别上,一切可能都很好。错误在 HTTP 级别。您无法解决服务器返回的内容,但是您可以获取HTTP状态代码:服务器可能返回404代码以及"找不到文件"消息。请参阅带有 libcurl 的 Http 状态代码?学习如何使用 libcurl 来做到这一点。如果可以直接使用 curl 程序,可以先使用 curl -I http://servera.com/filea.tar.gz
查看终端中的 HTTP 答案。
相关文章:
- C++中的输入限制和错误检查
- 在错误检查非 int 的内容时,控制台被淹没
- C++ 错误检查 fstream open() 命令和一般字符串流错误处理
- 运行时与编译时多态性:更好的可读性与编译时错误检查,更重要的是
- NPP 和 CUDA 错误检查
- 在此程序中获取错误:检查两个数组是否相等
- 错误 ~ 检查字符是否为小写字母
- 同时循环到错误检查 C++
- clang format函数和错误检查在同一行
- 使用宏进行赋值和错误检查
- 在C++中将命令行字符参数解析为int并进行错误检查
- 使用 Makefiles 在 Eclipse CDT 中进行错误检查
- 数据文件处理中的错误检查是否可以打开文件 - 为什么会发生
- 通过错误检查将参数转换为整数
- 这种错误检查方法的性能会不会太高
- C++通过错误检查将sscanf代码改编为distingstream
- 在windows错误检查中使用c++向gmail帐户发送电子邮件
- C++ 卷曲文件下载 - 错误检查
- 通过错误检查将 wstring 转换为双精度的方法
- 如何使用标准库函数通过错误检查将字符串 (char*) 转换为数字