Qt libcurl的下载、配置及简单测试 (windows环境)

Qt libcurl的下载、配置及简单测试

引言

curl(Client URL)是一个开源的命令行工具和库,用于传输数据支持多种协议(如HTTP、HTTPS、FTP、SFTP等)。其核心库libcurl提供了跨平台的API,允许开发者通过代码实现网络通信功能。

一、libcurl下载

官方下载地址:https://curl.se/download.html

    1. 找到适合自己的版本 (我的是Windows 64),下载带有devel标识的。Linux找不到对应版本可下载源码编译.
    1. 弹出如下界面选择第一个,下载的文件为:curl-8.15.0_4-win64-mingw.zip。

二、在Qt Creator中配置

    1. 新建项目,将压缩包里的include和lib文件夹拷贝到.pro同目录,然后在.pro文件中增加如下语句:
bash 复制代码
LIBS += -L$$PWD/lib
LIBS += -lcurl
    1. cpp可直接引用#include "include/curl/curl.h"
    1. 也可通过配置环境变量来使用 (可选)

参考链接:

libcurl的下载、编译和在Qt中的配置:https://blog.csdn.net/qq_50150638/article/details/140176873

一个非常优秀的跨平台物联网开发常用的网络请求库libcurl:https://cloud.tencent.com/developer/article/1962259

三、简单测试

运行需注意:压缩包里bin目录下的libcurl-x64.dll,需拷贝到项目生成的.exe同目录下,或者配置环境变量。测试结果,接口返回的响应如下所示:


测试流程:

    1. 在Apifox这个软件上创建测试接口,保存后会自动启用Mock用于测试:
    1. 在cpp里增加如下代码,注意替换Mock地址的URL:
cpp 复制代码
#include "include/curl/curl.h"
#include <QDebug>
#include <QJsonDocument>
#include <QByteArray>
#include <QJsonObject>

size_t write(char *buffer, size_t size, size_t nmemb, std::string* stream)
{
    size_t len = size * nmemb;
    stream->append(buffer, len);
    return len;
}


int main(int argc, char *argv[])
{
    CURL *curl;
    CURLcode res;
    std::string data;
    curl = curl_easy_init();
    if(curl) {
       curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
       curl_easy_setopt(curl, CURLOPT_URL, "http://127.0.0.1:4523/m1/6845287-6559514-default/api/cs");
       curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
       curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
       struct curl_slist *headers = NULL;
       headers = curl_slist_append(headers, "Content-Type: multipart/form-data");
       curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
       curl_mime *mime;
       curl_mimepart *part;
       mime = curl_mime_init(curl);
       part = curl_mime_addpart(mime);
       curl_mime_name(part, "id");
       curl_mime_data(part, "", CURL_ZERO_TERMINATED);
       part = curl_mime_addpart(mime);
       curl_mime_name(part, "name");
       curl_mime_data(part, "", CURL_ZERO_TERMINATED);
       curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);

       // recv_response
       curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write);
       curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);

       res = curl_easy_perform(curl);
       curl_mime_free(mime);
    }
    curl_easy_cleanup(curl);
    QByteArray byte = QByteArray::fromStdString(data);
    QJsonDocument doc = QJsonDocument::fromJson(byte);
    qDebug() << doc;
    qDebug() << doc.object().value("id").toString();
}

参考链接:

libcurl 文件下载demo:https://blog.51cto.com/u_16213673/13733484

Apifox 新手快速上手:https://blog.csdn.net/c8899y/article/details/140907072

Apifox Mock 功能全解析:https://apifox.com/help/articles/apifox-mock/

Apifox 和 Apipost: API工具的成本考量:https://zhuanlan.zhihu.com/p/27127854818

掌握 Postman Mock server 的实用技巧:https://zhuanlan.zhihu.com/p/696581669

使用postman搭建mock服务 :https://www.cnblogs.com/wx170119/p/12512507.html

libcurl编译与基本使用:https://blog.csdn.net/zwcslj/article/details/140265313

相关推荐
GIS数据转换器35 分钟前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
草莓熊Lotso1 小时前
【C++ 基于微服务的即时通讯系统】etcd + brpc 从安装到服务注册发现全链路实战
网络·数据库·c++·redis·微服务·etcd
Wang's Blog6 小时前
Java 项目实战: 交友项目:登录链路回顾与今日任务地图
java·开发语言·状态模式·交友
砚底藏山河6 小时前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年6 小时前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Williamtym7 小时前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
DongQiShanRen7 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CS创新实验室7 小时前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python
quantdash_cc7 小时前
Pandas 处理分钟级股票行情:从原始数据清洗到 K 线聚合
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
yu_zhidun7 小时前
企业电脑监控软件怎么选:别只看功能清单,先看这 6 个底层能力
开发语言·电脑·php·域智盾系统