0

0

c++怎么实现一个简单的HTTP请求_c++网络请求与HTTP通信示例

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-11-15 12:00:46

|

735人浏览过

|

来源于php中文网

原创

答案:C++中实现HTTP请求需用socket手动构造报文或使用libcurl等库。首先解析域名,创建TCP连接,发送符合HTTP规范的请求头,接收响应;对于POST请求还需设置Content-Length并携带请求体;推荐使用libcurl库以简化开发,支持HTTPS、重定向等高级功能,提升开发效率与稳定性。

c++怎么实现一个简单的http请求_c++网络请求与http通信示例

在C++中实现一个简单的HTTP请求,需要借助底层的网络编程接口或第三方库。由于C++标准库不直接支持HTTP协议,通常使用socket进行TCP通信,并手动构造HTTP报文。下面是一个使用POSIX socket在Linux环境下发送GET请求的简单示例。

使用Socket发送HTTP GET请求

通过创建TCP连接,连接到目标服务器的80端口(HTTP),然后手动发送符合HTTP/1.1规范的请求头。

// 示例:向 https://www.php.cn/link/563dc6cc0586f6fe22c71fac9b8783ae 发送GET请求

步骤说明:

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

  • 解析域名获取IP地址
  • 创建socket并连接服务器
  • 发送HTTP请求字符串
  • 接收并打印响应内容

完整代码示例:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

std::string httpGet(const std::string& host, const std::string& path) { struct hostent* he = gethostbyname(host.c_str()); if (!he) { return "无法解析域名"; }

int sock = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(80);
server.sin_addr = *(struct in_addr*)he-youjiankuohaophpcnh_addr;

if (connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0) {
    close(sock);
    return "连接失败";
}

std::string request = "GET " + path + " HTTP/1.1\r\n";
request += "Host: " + host + "\r\n";
request += "Connection: close\r\n";
request += "User-Agent: C++ Client/1.0\r\n";
request += "\r\n";

send(sock, request.c_str(), request.size(), 0);

char buffer[4096];
std::string response;
int bytes;
while ((bytes = recv(sock, buffer, sizeof(buffer) - 1, 0)) > 0) {
    buffer[bytes] = '\0';
    response += buffer;
}

close(sock);
return response;

}

int main() { std::string response = httpGet("httpbin.org", "/get"); std::cout

编译与运行

保存为http_get.cpp,使用g++编译:

BlessAI
BlessAI

Bless AI 提供五个独特的功能:每日问候、庆祝问候、祝福、祷告和名言的文本生成和图片生成。

下载
g++ http_get.cpp -o http_get

运行:

./http_get

你会看到来自服务器的HTTP响应,包括状态行、响应头和JSON格式的响应体。

处理POST请求(简要示例)

POST请求需要在请求头中指定Content-Length,并在请求体中发送数据。

std::string postData = "name=Tom&age=25";
std::string request = "POST " + path + " HTTP/1.1\r\n";
request += "Host: " + host + "\r\n";
request += "Connection: close\r\n";
request += "Content-Type: application/x-www-form-urlencoded\r\n";
request += "Content-Length: " + std::to_string(postData.size()) + "\r\n";
request += "User-Agent: C++ Client/1.0\r\n";
request += "\r\n";  // header结束
request += postData; // body数据

使用第三方库(推荐)

上面的方法适合学习原理,但实际开发中建议使用成熟库:

  • libcurl:功能强大,跨平台,支持HTTPS、cookies、重定向等
  • Boost.Beast:基于Boost.Asio,现代C++风格,适合复杂场景

以libcurl为例,GET请求只需几行代码:

#include 
#include 

int main() { CURL *curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, "https://www.php.cn/link/563dc6cc0586f6fe22c71fac9b8783ae"); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_perform(curl); curl_easy_cleanup(curl); } return 0; }

编译时链接libcurl:g++ -lcurl your_file.cpp

基本上就这些。手动实现有助于理解HTTP协议本质,而实际项目推荐用libcurl这类稳定高效的库。

相关专题

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

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

411

2023.08.07

json是什么
json是什么

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

532

2023.08.23

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

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

309

2023.10.13

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

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

74

2025.09.10

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

254

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

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

精品课程

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

共48课时 | 7.1万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

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

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