C++ libcurl库讲解

libcurl 是一个广泛使用的开源客户端URL传输库,支持多种协议,包括 HTTP、HTTPS、FTP、IMAP、POP3、SMTP 等。它允许开发者通过编程的方式发送和接收数据,与远程服务器进行交互。在 Windows 上使用 libcurl,你需要首先下载和编译该库,或者从预编译的二进制包中获取它。

安装 libcurl

在 Windows 上安装 libcurl 通常涉及以下几个步骤:

  1. 下载源码:从 libcurl 的官方网站或 GitHub 仓库下载最新版本的源码。
  2. 编译源码:使用 Visual Studio 或其他 C++ 编译器编译源码。你可能需要配置一些编译选项来确保生成的库文件与你的项目兼容。
  3. 链接库:在你的项目中链接编译好的 libcurl 库文件。这通常涉及在项目的链接器设置中添加库文件的路径。

使用 libcurl 进行 HTTP 请求

1. HTTP GET请求

#include <iostream>
#include <curl/curl.h>

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main()
{
    CURL *curl;
    CURLcode res;
    std::string readBuffer;
    // 初始化模块
    curl_global_init(CURL_GLOBAL_DEFAULT);
    // 初始化请求库
    curl = curl_easy_init();
    if(curl)
    {
        // CURLOPT_URL 请求的网站
        curl_easy_setopt(curl, CURLOPT_URL, "http://httpbin.org/get");
        // CURLOPT_WRITEFUNCTION 设置回调函数
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
        // 执行CURL访问网站
        res = curl_easy_perform(curl);
        if(res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        } else {
            std::cout << readBuffer << std::endl;
        }

        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();

    return 0;
}

 运行结果:

2. HTTP POST请求 

#include <iostream>
#include <curl/curl.h>

// 2. HTTP POST请求

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main()
{
    CURL *curl;
    CURLcode res;
    std::string readBuffer;
    const char *postFields = "field1=value1&field2=value2";

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    if(curl) {
        // 指定URL
        curl_easy_setopt(curl, CURLOPT_URL, "http://httpbin.org/post");
        // 指定post内容
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postFields);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
        // 执行CURL访问网站
        res = curl_easy_perform(curl);
        if(res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        } else {
            std::cout << readBuffer << std::endl;
        }

        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();

    return 0;
}

运行结果:

3. HTTP PUT请求 

#include <iostream>
#include <curl/curl.h>

// 3. HTTP PUT请求

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
    ((std::string*)userp)->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main()
{
    CURL *curl;
    CURLcode res;
    std::string readBuffer;
    const char *data = "field1=value1&field2=value2";

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();
    if(curl)
    {
        // 指定URL
        curl_easy_setopt(curl, CURLOPT_URL, "http://httpbin.org/put");
        // 指定put内容
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
        // CURLOPT_WRITEFUNCTION 设置回调函数
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
        // 执行CURL访问网站 
        res = curl_easy_perform(curl);
        if(res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
        } else {
            std::cout << readBuffer << std::endl;
        }

        curl_easy_cleanup(curl);
    }
    curl_global_cleanup();

    return 0;
}

运行结果: 

注意事项

  • 确保在编译你的项目时链接了 libcurl 库。
  • 如果你使用的是 HTTPS,确保你的 libcurl 版本支持 SSL,并且已经正确配置了 SSL 库(如 OpenSSL)。
  • libcurl 提供了很多其他的选项和功能,比如设置请求头、处理重定向、使用代理等。你可以查阅 libcurl 的官方文档来了解更多详细信息。

编译和链接

在 Windows 上,你可能需要使用 CMake 或其他构建系统来编译和链接你的项目。确保你的构建系统能够找到 libcurl 的头文件和库文件,并正确设置链接器选项。

这些只是 libcurl 的基本用法示例。对于更复杂的请求,比如处理认证、cookies、自定义请求头等,你需要查阅 libcurl 的官方文档以获取更详细的信息和示例代码。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值