QT之QNetworkAccessManager

文章目录

成员函数

1)QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data)

该函数用于发送 HTTP POST 请求,将数据作为请求体发送。

2)QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data)

该函数用于发送 HTTP PUT 请求,将数据作为请求体发送。

3)QNetworkReply *get(const QNetworkRequest &request)

该函数用于发送 HTTP GET 请求,不发送任何数据。

4)QNetworkReply *deleteResource(const QNetworkRequest &request)

该函数用于发送 HTTP DELETE 请求,删除指定的资源。

5)QNetworkReply *head(const QNetworkRequest &request)

该函数用于发送 HTTP HEAD 请求,仅获取资源的响应头信息,而不获取响应体。

6)QNetworkReply *get(const QNetworkRequest &request, QHttpMultiPart *multiPart)

该函数用于发送 HTTP GET 请求,并将多部分消息作为请求体发送。该函数是在 Qt 4.8 中引入的。

7)QStringList supportedSchemes() const

该函数返回支持的所有 URL 方案列表。

8)QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &requestMethod)

该函数用于发送自定义请求,可以指定请求方法和请求头。

9)void setProxy(const QNetworkProxy &proxy)

该函数用于设置网络代理。

10)void setConfiguration(const QNetworkConfiguration &config)

该函数用于设置网络配置,可以指定使10)用的网络配置,包括代理、认证等。

11)QNetworkConfiguration activeConfiguration() const

该函数返回当前活动的网络配置。

例程

1)发送POST请求:

cpp 复制代码
#include <QNetworkAccessManager>  
#include <QNetworkRequest>  
#include <QNetworkReply>  
#include <QByteArray>  
  
QNetworkAccessManager *manager = new QNetworkAccessManager(this);  
  
QNetworkRequest request(QUrl("http://example.com/post"));  
request.setMethod(QNetworkRequest::PostMethod);  
  
QByteArray postData = "key=value";  
request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");  
  
QNetworkReply *reply = manager->post(request, postData);  
  
connect(reply, &QNetworkReply::finished, this, [reply]() {  
    if (reply->error() != QNetworkReply::NoError) {  
        qDebug() << "Error:" << reply->errorString();  
    } else {  
        qDebug() << "Response:" << reply->readAll();  
    }  
    delete reply;  
});

在上述代码中,我们首先创建了一个QNetworkAccessManager对象。然后,我们创建一个QNetworkRequest对象,指定请求的URL和请求方法为POST。接下来,我们设置请求头中的Content-Type为application/x-www-form-urlencoded,并使用postData将要发送的数据设置为请求体。最后,我们使用manager的post()方法发送请求,并使用connect()函数连接QNetworkReply的finished()信号,以便在请求完成时处理响应。

2)发送GET请求:

cpp 复制代码
#include <QNetworkAccessManager>  
#include <QNetworkRequest>  
#include <QNetworkReply>  
#include <QUrlQuery>  
  
QNetworkAccessManager *manager = new QNetworkAccessManager(this);  
  
QUrl url("http://example.com/get");  
QUrlQuery query;  
query.addQueryItem("key1", "value1");  
query.addQueryItem("key2", "value2");  
url.setQuery(query);  
  
QNetworkRequest request(url);  
request.setMethod(QNetworkRequest::GetMethod);  
  
QNetworkReply *reply = manager->get(request);  
  
connect(reply, &QNetworkReply::finished, this, [reply]() {  
    if (reply->error() != QNetworkReply::NoError) {  
        qDebug() << "Error:" << reply->errorString();  
    } else {  
        qDebug() << "Response:" << reply->readAll();  
    }  
    delete reply;  
});

在上述代码中,我们创建了一个QNetworkAccessManager对象,并使用QUrl构建了一个URL对象,并使用QUrlQuery设置了查询参数。然后,我们创建一个QNetworkRequest对象,指定请求的URL和请求方法为GET。最后,我们使用manager的get()方法发送请求,并使用connect()函数连接QNetworkReply的finished()信号,以便在请求完成时处理响应。

相关推荐
blasit12 小时前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab