基于curl C++简单的get/post封装

基于curl简单的get/post封装

#include <curl.h>
#include <memory>
static size_t string_write(char *ptr, size_t size, size_t nmemb, std::string &str)
{
    size_t total = size * nmemb;
    if (total) str.append(ptr, total);
    return total;
}
QString HttpCurlRequest(QString url, QString postData = "")
{
    char error[CURL_ERROR_SIZE];
    std::string writeData;
    auto curl_deleter = [](CURL* curl) {curl_easy_cleanup(curl);};
    using Curl = std::unique_ptr<CURL, decltype(curl_deleter)>;
    Curl curl{curl_easy_init(), curl_deleter};
    if (curl) {
        struct curl_slist *header = nullptr;
        header = curl_slist_append(header,"Content-Type: application/json");
        header = curl_slist_append(header,"Referer: https://xxx");
        header = curl_slist_append(header,"Cookie: uid=64665xxx");
        curl_easy_setopt(curl.get(), CURLOPT_URL, url.toStdString().c_str());
        curl_easy_setopt(curl.get(), CURLOPT_HTTPHEADER, header);
        curl_easy_setopt(curl.get(), CURLOPT_ERRORBUFFER, error);
        curl_easy_setopt(curl.get(), CURLOPT_WRITEFUNCTION, string_write);
        curl_easy_setopt(curl.get(), CURLOPT_WRITEDATA, &writeData);
        curl_easy_setopt(curl.get(), CURLOPT_COOKIEFILE,"");
        curl_easy_setopt(curl.get(), CURLOPT_SSL_ENABLE_ALPN, 0);   //support LIBCURL_VERSION_NUM >= 0x072400
        if(postData.length() > 0)
        {
            curl_easy_setopt(curl.get(), CURLOPT_POSTFIELDS, postData.toStdString().c_str());   //post
        }
        CURLcode code = curl_easy_perform(curl.get());
        curl_slist_free_all(header);
        return (code != CURLE_OK) ?  QString::fromUtf8(error) : QString::fromUtf8(writeData.c_str());
    }
}

调用:

    QString postUrl = "https://xxx.com/node/?d=lotxr";
    QString postData = "{\"axxd\":1327}";
    QString postRetStr = HttpCurlRequest(postUrl, postData);
    QDBG << postRetStr;

    QString getUrl = "https://xxx.com/node/?d=lxxer&c=tixx";
    QString getRetStr = HttpCurlRequest(getUrl);
    QDBG << getRetStr;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值