C++中使用curl仅获取HTTP状态码而非网页内容的技术问询
仅用CURL获取HTTP状态码(不返回网页内容)
要避免curl返回网页内容,只获取HTTP状态码,有两种高效的实现方式:
方法一:发送HEAD请求(推荐)
通过设置CURLOPT_NOBODY选项,让curl发送HEAD请求,服务器通常只会返回响应头,不会传输响应体,大幅减少数据传输量。
修改后的代码:
CURL *curl = curl_easy_init(); if(curl) { CURLcode res; curl_easy_setopt(curl, CURLOPT_URL, "example.com"); // 启用HEAD请求,不获取响应体 curl_easy_setopt(curl, CURLOPT_NOBODY, 1L); res = curl_easy_perform(curl); if(res == CURLE_OK) { long response_code; // 提取HTTP状态码 curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code); // 按需使用状态码,示例:打印到控制台 printf("HTTP状态码: %ld\n", response_code); } else { fprintf(stderr, "请求失败: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); }
方法二:自定义写函数丢弃响应体
如果部分服务器不支持HEAD请求,可以设置一个空的写函数,让curl自动丢弃响应体内容:
// 自定义写函数:直接返回字节数,不处理响应体 size_t discard_write(void *ptr, size_t size, size_t nmemb, void *userdata) { return size * nmemb; } CURL *curl = curl_easy_init(); if(curl) { CURLcode res; curl_easy_setopt(curl, CURLOPT_URL, "example.com"); // 设置自定义写函数 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, discard_write); curl_easy_setopt(curl, CURLOPT_WRITEDATA, NULL); // 无需额外数据 res = curl_easy_perform(curl); if(res == CURLE_OK) { long response_code; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code); printf("HTTP状态码: %ld\n", response_code); } else { fprintf(stderr, "请求失败: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); }
关键说明
CURLOPT_NOBODY:设置为1L时,curl切换为HEAD请求模式,这是最节省资源的方案。CURLOPT_WRITEFUNCTION:覆盖默认的响应体处理逻辑,空函数仅告知curl已完成内容处理,避免内容输出到标准输出。- 两种方法都需要在
curl_easy_perform执行成功后,通过CURLINFO_RESPONSE_CODE提取状态码。
内容的提问来源于stack exchange,提问作者ErrorCode 404
相关产品推荐
相关产品推荐

