当前位置: 首页 > news >正文

Win10上Qt使用Libcurl库

第1章 下载libcurl

下载链接

第2章 curl集成到Qt中

  1. 将已经编译好的libcurl目录下的lib和include目录拷贝到项目源码目录中。
  1. 将libcurl目录下的bin目录下的【libcurl-x64.dll】动态库拷贝到源码目录下可执行文件【testdemo3.exe】位置。

第3章 配置qmake

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++17# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.h# 设置 libcurl 的头文件路径
INCLUDEPATH += E:/Mytest/test20250814_1/testdemo3/include# 设置 libcurl 的库文件路径
LIBS += -L"E:/Mytest/test20250814_1/testdemo3/lib"# 链接curl的主库 libcurl.a 静态库
LIBS += -lcurl# 链接 libssl.a 和 libcrypto.a。以便支持OpenSSL,用于HTTPS
LIBS += -lssl
LIBS += -lcrypto# 链接 libz.a。以便支持zlib,用于 HTTP 压缩(gzip)
LIBS += -lz# 链接 libssh2.a。以便支持SSH/SFTP 支持
LIBS += -lz# 定义宏,表示使用静态库
DEFINES += CURL_STATICLIB# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

第4章 访问百度测试

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <string>// 引入 libcurl
extern "C" {
#include <curl/curl.h>
}class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void onFetchBaidu();  // 按钮点击事件private:QPushButton *fetchButton;// libcurl 回调函数static size_t writeCallback(void* contents, size_t size, size_t nmemb, std::string* s);
};#endif // WIDGET_H

---------------------------------------------------------------------------------------------------

#include "widget.h"
#include <QVBoxLayout>
#include <QtWidgets>// 回调函数:接收 HTTP 响应数据
size_t Widget::writeCallback(void* contents, size_t size, size_t nmemb, std::string* s)
{size_t totalSize = size * nmemb;s->append(static_cast<char*>(contents), totalSize);return totalSize;
}Widget::Widget(QWidget *parent): QWidget(parent)
{// 设置窗口大小和标题this->setWindowTitle("访问百度测试");this->resize(400, 150);// 创建垂直布局QVBoxLayout *layout = new QVBoxLayout(this);// 创建按钮fetchButton = new QPushButton("访问百度", this);// 添加到布局layout->addWidget(fetchButton);// 连接按钮点击信号到槽函数connect(fetchButton, &QPushButton::clicked, this, &Widget::onFetchBaidu);
}Widget::~Widget()
{// 析构函数(libcurl 无需在这里清理)
}void Widget::onFetchBaidu()
{// 初始化 libcurlCURL *curl = curl_easy_init();if (!curl) {qDebug() << "libcurl 初始化失败!";return;}std::string response;// 设置请求选项curl_easy_setopt(curl, CURLOPT_URL, "https://www.baidu.com");curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);           // 跟随重定向curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writeCallback); // 写入数据的回调curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);         // 传递 response 字符串// 禁用 SSL 验证(解决 2025 年证书可能过期的问题)curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);// 执行请求CURLcode res = curl_easy_perform(curl);if (res != CURLE_OK) {qDebug() << "请求失败:" << curl_easy_strerror(res);} else {long statusCode;curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &statusCode);qDebug() << "请求成功!HTTP 状态码:" << statusCode;// 打印百度首页的 HTML 内容(UTF-8)qDebug() << "百度首页内容开始:";qDebug().noquote() << QString::fromUtf8(response.c_str());qDebug() << "内容结束。";}// 清理资源curl_easy_cleanup(curl);
}
http://www.xdnf.cn/news/1295659.html

相关文章:

  • Qt 实现Ymodem协议源码分享
  • MySQL工具包中的其他程序
  • 从概率填充到置信度校准:GPT-5如何从底层重构AI的“诚实”机制
  • 树莓派 4B 上部署 Minecraft PaperMC 1.20.x 的一键部署脚本
  • ASQA: 面向模糊性事实问题的长格式问答数据集与评估框架
  • C#WPF实战出真汁02--登录界面设计
  • 利用 Python 爬虫按图搜索 1688 商品(拍立淘)实战指南
  • Windows批处理脚本自动合并当前目录下由You-get下载的未合并的音视频文件
  • LeetCode 分类刷题:2302. 统计得分小于 K 的子数组数目
  • 我的第一个开源项目-jenkins集成k8s项目
  • 开疆智能Ethernet转ModbusTCP网关连接UR机器人配置案例
  • 区块链 + 域名Web3时代域名投资的新风口(上)
  • 《算法导论》第 25 章:所有结点对的最短路径问题
  • 常见的tls检测的绕过方案
  • Mybatis学习笔记(二)
  • Transformer之多头注意力机制和位置编码(二)
  • vue更改style
  • 双椒派E2000D网络故障排查指南
  • 【Linux】库制作与原理
  • 2025年5月架构设计师综合知识真题回顾,附参考答案、解析及所涉知识点(三)
  • 苹果正计划大举进军人工智能硬件领域
  • 解决EKS中KEDA访问AWS SQS权限问题:完整的IRSA配置指南
  • 能源行业数字化转型:边缘计算网关在油田场景的深度应用
  • 支持pcm语音文件缓存顺序播放
  • 从感知到执行:人形机器人低延迟视频传输与多模态同步方案解析
  • Python 类元编程(导入时和运行时比较)
  • 【Linux学习|黑马笔记|Day3】root用户、查看权限控制信息、chmod、chown、快捷键、软件安装、systemctl、软连接、日期与时区
  • 17. 如何判断一个对象是不是数组
  • 技术速递|使用 AI Toolkit 构建基于 gpt-oss-20b 的应用程序
  • 工业元宇宙:迈向星辰大海的“玄奘之路”