C++使用libcurl调用接口返回数据

1.环境配置

首先在网上要下载对应的libcurl库,然后在项目中引用这些库。下载的库文件应包括这些
在这里插入图片描述
然后在项目中配置环境:
1.引用头文件
在这里插入图片描述
2.链接静态库
在这里插入图片描述
在这里插入图片描述

3.动态库需放在生成的debug或release目录中

2.相关函数封装

get函数:

static size_t WriteDataCallback(void* contents, size_t size, size_t nmemb, void* userp)
{
    try
    {
        size_t realsize = size * nmemb;
        static int current_index = 0;
        int content_size = nmemb * size;
        std::string result = std::string((char*)contents, content_size);
        string* pStr = (string*)userp;
        if (pStr)
        {
            (*pStr).append(result);
        }
        return realsize;
    }
    catch (...)
    {

    }
    return 0;
}

CURLcode HttpGet(const std::string& url,std::string& response, int timeout = 300)
{
    CURLcode return_code, res;
    return_code = curl_global_init(CURL_GLOBAL_WIN32);
    if (CURLE_OK != return_code)
    {
        return CURLE_FAILED_INIT;
    }
    // 获取easy handle
    CURL* easy_handle = curl_easy_init();
    if (NULL == easy_handle)
    {
        curl_global_cleanup();
        return CURLE_FAILED_INIT;
    }
    // 设置easy handle属性
    curl_easy_setopt(easy_handle, CURLOPT_URL, url.c_str());
    curl_easy_setopt(easy_handle, CURLOPT_WRITEFUNCTION, WriteDataCallback);
    curl_easy_setopt(easy_handle, CURLOPT_TIMEOUT, timeout);
    curl_easy_setopt(easy_handle, CURLOPT_WRITEDATA, (void*)&response);
    // 执行数据请求
    res = curl_easy_perform(easy_handle);
    curl_easy_cleanup(easy_handle);
    curl_global_cleanup();
    return res;

}

2.post函数

size_t ReceiveData(void* contents, size_t size, size_t nmemb, void* stream)
{
    std::string* str = (std::string*)stream;
    (*str).append((char*)contents, size * nmemb);
    return size * nmemb;
}

CURLcode HttpPost(const std::string& url, const std::string& data, std::string& response, int timeout = 300)
{
    CURLcode res;
    CURL* curl = curl_easy_init();
    struct curl_slist* headers = NULL;
    headers = curl_slist_append(headers, "Content-Type:application/json;charset=UTF-8");

    if (curl == NULL)
    {
        return CURLE_FAILED_INIT;
    }

    // 设置请求地址
    curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
    // 设置请求头信息
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    // 不显示接收头信息
    curl_easy_setopt(curl, CURLOPT_HEADER, 0);
    // 设置请求超时时间
    curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, timeout);
    // 设置请求体
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data.c_str());
    // 设置接收函数
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ReceiveData);
    // 设置接收内容
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)&response);

    res = curl_easy_perform(curl);
    curl_easy_cleanup(curl);
    return res;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++使用libcurl库可以方便地进行网络通信,包括发送HTTP请求、下载文件等操作。下面是使用libcurl的一般步骤: 1. 引入头文件:在代码中引入libcurl的头文件,通常是`#include <curl/curl.h>`。 2. 初始化和清理:在使用libcurl之前,需要调用`curl_global_init()`函数进行初始化,并在使用完毕后调用`curl_global_cleanup()`函数进行清理。 3. 创建和配置CURL对象:使用`curl_easy_init()`函数创建一个CURL对象,并使用`curl_easy_setopt()`函数设置相关选项,如设置请求的URL、设置请求的方法、设置请求头等。 4. 执行请求:使用`curl_easy_perform()`函数执行请求,该函数会阻塞直到请求完成。 5. 处理响应:可以通过设置回调函数来处理响应数据,如保存到文件、打印到控制台等。 6. 清理资源:使用`curl_easy_cleanup()`函数释放CURL对象。 下面是一个简单的示例代码,演示了如何使用libcurl发送GET请求并将响应打印到控制台: ```cpp #include <iostream> #include <curl/curl.h> // 回调函数,处理响应数据 size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* response) { size_t totalSize = size * nmemb; response->append((char*)contents, totalSize); return totalSize; } int main() { CURL* curl; CURLcode res; std::string response; // 初始化 curl_global_init(CURL_GLOBAL_DEFAULT); // 创建CURL对象 curl = curl_easy_init(); if (curl) { // 设置请求的URL 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; } // 打印响应数据 std::cout << response << std::endl; // 清理资源 curl_easy_cleanup(curl); } // 清理 curl_global_cleanup(); return 0; } ``` 这只是一个简单的示例,libcurl还提供了更多的功能和选项,可以根据具体需求进行配置和使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值