You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 08:54:18