static
size_t
cb
(
void
*
data
,
size_t size
,
size_t nmemb
,
void
*
userp
)
size_t realsize
=
size
*
nmemb
;
struct
memory
*
mem
=
(
struct
memory
*
)
userp
;
char
*
ptr
=
(
char
*
)
realloc
(
mem
-
>
response
,
mem
-
>
size
+
realsize
+
1
)
;
if
(
ptr
==
NULL
)
return
0
;
mem
-
>
response
=
ptr
;
memcpy
(
&
(
mem
-
>
response
[
mem
-
>
size
]
)
,
data
,
realsize
)
;
mem
-
>
size
+
=
realsize
;
mem
-
>
response
[
mem
-
>
size
]
=
0
;
return
realsize
;
int
main
(
)
CURL
*
curl
=
curl_easy_init
(
)
;
if
(
!
curl
)
std
::
clog
<<
"curl_easy_init call failed!"
<<
std
::
endl
;
return
-
1
;
curl_easy_setopt
(
curl
,
CURLOPT_URL
,
"http://google.com/"
)
;
curl_easy_setopt
(
curl
,
CURLOPT_WRITEFUNCTION
,
cb
)
;
curl_easy_setopt
(
curl
,
CURLOPT_TIMEOUT
,
10
)
;
curl_easy_setopt
(
curl
,
CURLOPT_ACCEPT_ENCODING
,
"gzip"
)
;
struct
memory chunk
;
curl_easy_setopt
(
curl
,
CURLOPT_WRITEDATA
,
(
void
*
)
&
chunk
)
;
CURLcode res
=
curl_easy_perform
(
curl
)
;
if
(
CURLE_OK
!=
res
)
std
::
clog
<<
"error:"
<<
curl_easy_strerror
(
res
)
<<
std
::
endl
;
return
-
1
;
std
::
clog
<<
chunk
.
response
<<
std
::
endl
;
curl_easy_cleanup
(
curl
)
;
return
0
;
优点:header-only && cross platform
示例代码:
#include "cpp-httplib/httplib.h"
int main()
httplib::Client cli("es-cn-xxxx.elasticsearch.aliyuncs.com", 9200);
cli.set_basic_auth("xxx", "xxx");
httplib::Headers headers = {
{"Accept-Encoding", "gzip"}
};
auto res = cli.Post("url", headers, "post", "application/json");
文章目录libcurl链接地址:[https://curl.se/libcurl/](https://curl.se/libcurl/)cpp-httplib链接地址:[https://github.com/yhirose/cpp-httplib.git](https://github.com/yhirose/cpp-httplib.git)libcurl链接地址:https://curl.se/libcurl/优点:普遍使用示例代码:#include <curl/curl.h>#i
文章目录前言`cpp-http` 库简介`cpp-http` 库使用介绍http 客户端搭建步骤http 服务端搭建步骤`cpp-http` 库示例服务端实现客户端实现参考资料
最近在做的一个项目需要使用到 HTTP 协议,在网上查了很久,也结合了之前学长做的项目,发现 cpp-http 库使用挺多的,所以就边学边做笔记,顺便分享出来(我觉得知识之所以叫知识,就是因为它能被记录并能被传播,为人所知,为人所识)。
我准备把这个学习记录做成一个系列文章,这个系列里面,我会介绍从 HTTP 协议诞生到目前的
C++ 实现 HTTP 请求可以使用一些第三方网络库,例如 libcurl、Boost.Asio 和 Poco 等等。下面以 libcurl 为例,介绍如何使用 C++ 实现 HTTP 请求:
```cpp
#include <iostream>
#include <curl/curl.h>
int main() {
CURL* curl;
CURLcode res;
// 初始化 libcurl
curl = curl_easy_init();
if (curl) {
// 设置请求 URL
curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com");
// 发送请求
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
// 清理 libcurl
curl_easy_cleanup(curl);
return 0;
在上面的代码中,我们首先使用 `curl_easy_init` 函数初始化 libcurl,然后使用 `curl_easy_setopt` 函数设置请求 URL。接着,我们调用 `curl_easy_perform` 函数发送请求,并检查请求是否成功。最后,我们使用 `curl_easy_cleanup` 函数清理 libcurl。
需要注意的是,libcurl 可以同时处理多个请求,并且支持多种协议(例如 HTTP、HTTPS、FTP 等等)。因此,如果您需要实现更复杂的网络操作,可以参考 libcurl 的官方文档:https://curl.haxx.se/libcurl/。
除了 libcurl 之外,Boost.Asio 和 Poco 也是比较常用的 C++ 网络库,它们提供了更加灵活和高级的网络操作方式,例如异步 IO、HTTPS 支持、WebSocket 支持等等。如果您需要实现更为复杂的网络操作,可以考虑使用这些库。