CURLE_COULDNT_CONNECT多因未初始化或URL缺协议头;需调用curl_global_init、显式指定http/https、配置SSL证书、启用重定向;下载应通过WRITEFUNCTION流式写入文件,续传需手动设Range头;Windows静态链接须定义CURL_STATICLIB且库顺序正确。

curl_easy_perform 返回 CURLE_COULDNT_CONNECT 怎么办
多数情况不是代码写错了,而是没初始化或没设对 URL 协议头。CURL 默认不自动补 http:// 或 https://,传入 "example.com/file.zip" 会直接失败。
- 必须显式带上协议,比如用
"https://example.com/file.zip" - 调用
curl_global_init(CURL_GLOBAL_DEFAULT)是必须的,漏掉就可能连 DNS 都解析不了 - HTTPS 场景下,Windows 上常见证书问题:不设
CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST可能报错;但生产环境别关校验,应改用CURLOPT_CAINFO指向本地ca-bundle.crt - 如果目标 URL 有重定向,记得加
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L),否则 302 后就停住不动了
怎么把下载内容直接写进文件而不全塞内存
核心是用 CURLOPT_WRITEFUNCTION + CURLOPT_WRITEDATA 控制写入逻辑,而不是靠 curl_easy_perform 返回字符串再存盘——大文件时内存炸得无声无息。
-
WRITEFUNCTION回调函数原型必须是size_t write_callback(void *ptr, size_t size, size_t nmemb, void *userdata),返回实际写入字节数(size * nmemb),否则 CURL 会认为写失败而中断 -
userdata传进去的是FILE*指针,打开文件要用"wb"模式(二进制),别用"w",否则 Windows 下换行符会被篡改 - 别在回调里做 fclose,应该在
curl_easy_perform完成后统一关;提前关会导致后续写入段错误
size_t write_to_file(void *ptr, size_t size, size_t nmemb, void *userdata) {
FILE *fp = (FILE*)userdata;
size_t written = fwrite(ptr, size, nmemb, fp);
return written;
}下载中途断了怎么续传(HTTP Range)
服务端支持 Accept-Ranges: bytes 才能续传。CURL 本身不自动检测断点,得自己查本地文件大小,再手动加 Range 头。
- 先用
fseek(fp, 0, SEEK_END); long offset = ftell(fp);获取已下载字节数 - 设置
curl_easy_setopt(curl, CURLOPT_RANGE, "bytes=123456-"),其中123456是 offset - 注意:此时
WRITEFUNCTION要跳过 fseek,直接追加写(fseek(fp, 0, SEEK_END)放回调开头) - 服务端不支持 Range 时,
curl_easy_perform仍会成功,但返回状态码是 200 而非 206,得用CURLOPT_HEADERFUNCTION拦响应头判断
Windows 下编译链接 curl 静态库总报 unresolved external
不是头文件没包含,是链接器根本没看到 libcurl 的符号。静态链接时,宏定义和库顺序都卡得死。
立即学习“C++免费学习笔记(深入)”;
- 必须定义
CURL_STATICLIB(在所有#include <curl/curl.h>前),否则curl_global_init等函数被声明为 DLL 导出,链接时找不到 - VC++ 项目里,
libcurl.lib必须放在依赖项最后——它依赖ws2_32.lib、wldap32.lib、crypt32.lib,顺序反了就报一堆unresolved external symbol __imp__... - MinGW 用户注意:
libcurl.a分带 SSL 和不带 SSL 的版本,用 HTTPS 就得选libcurl_ssl.a并确保 OpenSSL 库也链上
CURL 的流式写入看着简单,但 WRITEFUNCTION 返回值、文件打开模式、静态库宏定义这三处,任一出错都会让程序静默失败或崩溃,而且不容易定位。



















