0

0

C++如何发送HTTP请求?(libcurl库使用教程)

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-12-29 12:59:02

|

155人浏览过

|

来源于php中文网

原创

最成熟跨平台方式是使用libcurl库。它封装网络协议细节,支持HTTPS、重定向、Cookie等,API稳定且文档完善;需按平台安装并调用curl_global_init/cleanup;GET/POST请求需设置URL、回调函数、超时等选项,并注意内存与错误处理。

c++如何发送http请求?(libcurl库使用教程)

用 C++ 发送 HTTP 请求最成熟、跨平台的方式是使用 libcurl 库。它底层封装了网络协议细节,支持 HTTPS、重定向、Cookie、上传下载、超时控制等,且 API 稳定、文档完善。

一、环境准备:安装与链接 libcurl

不同平台安装方式略有差异:

  • Linux(Ubuntu/Debian):运行 sudo apt install libcurl4-openssl-dev,编译时加 -lcurl
  • macOS:用 Homebrew 安装 brew install curl,链接时通常无需额外指定(系统自带或 brew 提供的 curl 已含开发头文件)
  • Windows(MSVC):推荐用 vcpkg:vcpkg install curl:x64-windows,然后在项目中配置 include 和 lib 路径

确保包含头文件:#include ,并在程序开始调用 curl_global_init(CURL_GLOBAL_DEFAULT);,结束前调用 curl_global_cleanup();

二、基础 GET 请求示例

以下是最简可用的同步 GET 请求代码:

立即学习C++免费学习笔记(深入)”;

CURL* curl = curl_easy_init();
if (curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "https://httpbin.org/get");
  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); // 自动跳转
  curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10L);       // 10 秒超时

// 捕获响应体到字符串 std::string response; curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, [](void ptr, size_t size, size_t nmemb, void userp) -> size_t { auto& str = static_cast>(userp); size_t len = size nmemb; str.append(static_cast>(ptr), len); return len; }); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

CURLcode res = curl_easy_perform(curl); if (res == CURLE_OK) { printf("Response: %s\n", response.c_str()); } else { fprintf(stderr, "curl error: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl); }

关键点:

知鹿匠
知鹿匠

知鹿匠教师AI工具,新课标教案_AI课件PPT_作业批改

下载
  • CURLOPT_WRITEFUNCTION 是必须设置的回调,用于接收服务器返回的数据
  • CURLOPT_WRITEDATA 传入用户数据指针(如 &response),在回调中通过 userp 获取
  • 不要忽略 curl_easy_cleanup,否则会内存泄漏

三、带请求头和 POST 数据的请求

发送 JSON POST 请求常见于调用 REST API:

std::string json_data = R"({"key":"value"})";
struct curl_slist* headers = nullptr;
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "Accept: application/json");

curl_easy_setopt(curl, CURLOPT_URL, "https://www.php.cn/link/dc076eb055ef5f8a60a41b6195e9f329"); curl_easy_setopt(curl, CURLOPT_POST, 1L); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data.c_str()); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

// 执行后记得释放 header 列表 curl_slist_free_all(headers);

注意:

  • CURLOPT_POSTFIELDS 直接传字符串指针,libcurl 会自动设置 Content-Length
  • 若需手动控制 body(如流式上传),改用 CURLOPT_READFUNCTION + CURLOPT_READDATA
  • Header 列表用完必须调用 curl_slist_free_all

四、错误处理与调试技巧

生产环境务必检查返回值并开启调试信息:

  • 每次 curl_easy_setopt 不会报错,但错误常出现在 curl_easy_perform 中,应检查其返回值
  • 启用详细日志:curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);,输出到终端便于排查连接、SSL、重定向问题
  • 获取 HTTP 状态码:long http_code = 0; curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code);
  • SSL 验证失败(如自签名证书)可临时禁用:curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);(仅测试用,切勿上线)

不复杂但容易忽略。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

401

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

528

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

306

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

72

2025.09.10

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6406

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

336

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

394

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

86

2025.08.19

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

121

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.2万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号