内容提要
1. 安装libcurl库
2. 使用libcurl需要的编译参数
3. get请求
4. 参考链接
一、 安装libcurl库
download address: https://curl.haxx.se/download/
或者 wget https://curl.haxx.se/download/curl-7.64.1.tar.gz
到下载目录, 解压, 进入curl文件夹 执行以下命令
./configure
make
sudo make install
二、 使用libcurl时需要的编译参数
例如当前文件为main.cpp
编译: g++ main.cpp -lcurl
三、 get请求
函数原型
/***
* buffer 接收数据所在的缓冲区
* size 要读取的字节数
* count 读写size长度的数据count次
* user_ptr 用户自定义文件指针
*/
size_t getUrlResponse(void *buffer, size_t size, size_t count, void *user_ptr); // 在这里用作回调函数
/***
* url 请求网址
*/
std::string get(const std::string& url); // 传入url执行get请求
参数介绍
easy interface函数, 有同样的名称前缀curl_easy.
要使用easy interface函数, 首先需要一个easy handle, 用于参数处理.
如何声明一个easy handle?
CRUL *handle;
可以在easy handle上设置属性和操作, 不可以多个线程共享一个easy handle
使用 curl_easy_setopt(handle, opt, param) 函数
设置easy handle属性与操作, 这些属性与操作控制如何与远程主机通信
常用opt属性设置:
CURLOPT_URL 设置url
CURLOPT_WRITEFUNCTION 注册回调函数
CURLOPT_WRITEDATA 数据存储指针
如果想保存请求后从远程主机返回的数据, 需要注册回调函数, 回调函数的原型为上方的getUrlResponse函数, 此函数会在接收到数据时调用
使用curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, &getUrlResponse)
使用注册回调函数, 只是提供一个自定义参数buffer, libcurl不对返回的数据进行处理, 只能简单的传递, 哪怎么能获取到数据呢?
使用curl_easy_setopt(handle, CURLOPT_WRITEDATA, &user_ptr) 修改回调函数参数, 然后设置数据存储指针, 请求后的数据就会存到user_ptr中, user_ptr也可以是文件指针. (例如后文-实现get请求)
使用curl_easy_perform(handle) 执行get请求
实现get请求
#include <iostream>
#include <curl/curl.h>
using namespace std;
/* 不考虑任何异常的情况, 简单的get请求 */
/***
* buffer 接收数据所在的缓冲区
* size 要读取的字节数
* count 读写size长度的数据count次
* response 用户自定义文件指针
*/
size_t getUrlResponse(char* buffer, size_t size, size_t count, string* response) {
size_t recv_size = size * count;
response->clear();
response->append(buffer);
return recv_size;
}
string get(const string& url) {
// 请求数据
string response;
// easy handle声明
CURL *handle;
// 初始化handle
handle = curl_easy_init();
// 设置url
curl_easy_setopt(handle, CURLOPT_URL, url.c_str());
// 注册回调函数
curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, &getUrlResponse);
/* 可以注释 set CURLOPT_WRITEDATA, 同时将回调函数恢复为上文中的原型, 看看会发生什么 */
// 获取信息
curl_easy_setopt(handle, CURLOPT_WRITEDATA, &response);
// 执行请求
curl_easy_perform(handle);
// 释放
curl_easy_cleanup(handle);
return response;
}
int main() {
// 使用前初始化libcurl, 只需初始化一次
curl_global_init(CURL_GLOBAL_DEFAULT);
// 执行请求
cout << get("www.baidu.com");
// 释放libcurl相关资源
curl_global_cleanup();
return 0;
}
四、 参考链接
关于libcurl更多用法, 在下方参考链接
- https://www.cnblogs.com/jikexianfeng/p/6055024.html
来源:CSDN
作者:yanuas
链接:https://blog.csdn.net/weixin_46370795/article/details/104416053