c++如何使用http协议
时间: 2024-05-13 14:10:19 浏览: 14
C++可以使用第三方库来实现HTTP协议的功能其中,比较常用的库有libcurl和Boost.Beast。
1. 使用libcurl库:
libcurl是一个功能强大的开源库,可以用于发送和接收HTTP请求。以下是使用libcurl库发送HTTP GET请求的示例代码:
```cpp
#include <iostream>
#include <curl/curl.h>
// 回调函数,用于处理接收到的HTTP响应
size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response)
{
response->append((char*)contents, size * nmemb);
return size * nmemb;
}
int main()
{
CURL* curl;
CURLcode res;
std::string response;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
std::cout << "Response: " << response << std::endl;
return 0;
}
```
上述代码使用了libcurl库发送了一个HTTP GET请求,并将响应保存在response字符串中。你可以根据需要修改URL和其他请求参数。
2. 使用Boost.Beast库:
Boost.Beast是Boost库中的一个模块,提供了HTTP和WebSocket的实现。以下是使用Boost.Beast库发送HTTP GET请求的示例代码:
```cpp
#include <iostream>
#include <boost/beast/core.hpp>
#include <boost/beast/http.hpp>
#include <boost/beast/version.hpp>
#include <boost/asio/ip/tcp.hpp>
#include <boost/asio/connect.hpp>
#include <boost/asio/streambuf.hpp>
namespace beast = boost::beast;
namespace http = beast::http;
namespace net = boost::asio;
using tcp = net::ip::tcp;
int main()
{
net::io_context io_context;
tcp::resolver resolver(io_context);
tcp::socket socket(io_context);
auto const results = resolver.resolve("example.com", "http");
beast::get_lowest_layer(socket).connect(results);
http::request<http::string_body> req{ http::verb::get, "/", 11 };
req.set(http::field::host, "example.com");
req.set(http::field::user_agent, BOOST_BEAST_VERSION_STRING);
http::write(socket, req);
beast::flat_buffer buffer;
http::response<http::dynamic_body> res;
http::read(socket, buffer, res);
std::cout << res << std::endl;
beast::error_code ec;
socket.shutdown(tcp::socket::shutdown_both, ec);
if (ec && ec != beast::errc::not_connected) {
std::cerr << "socket shutdown error: " << ec.message() << std::endl;
return -1;
}
return 0;
}
```
上述代码使用了Boost.Beast库发送了一个HTTP GET请求,并将响应打印到控制台。你可以根据需要修改URL和其他请求参数。