# QtNetworkService **Repository Path**: bingozyw/QtNetworkService ## Basic Information - **Project Name**: QtNetworkService - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2021-10-19 - **Last Updated**: 2021-10-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 一个简单的使用例子 ```cpp HttpClient client; client.get("https://qthub.com") .onSuccess([](QString result) { qDebug()<<"result:"< lambda); HttpRequest &onSuccess(std::function lambda); HttpRequest &onSuccess(std::function lambda); ``` * Http请求返回失败的信号槽绑定 ```cpp HttpRequest &onFailed(const QObject *receiver, const char *method); HttpRequest &onFailed(std::function lambda); HttpRequest &onFailed(std::function lambda); HttpRequest &onFailed(std::function lambda); ``` ### 例子: ```cpp static HttpClient client; client.get("https://qthub.com") .onSuccess(this, SLOT(onSuccess(QString))) .onFailed(this, SLOT(onFailed(QString))) .exec(); // 执行Http操作 ``` ## 2.2 使用匿名函数的方式实现成功与失败的事件处理 ### 接口: * Http请求返回成功的回调事件 ```cpp HttpRequest &onSuccess(std::function lambda); HttpRequest &onSuccess(std::function lambda); HttpRequest &onSuccess(std::function lambda); ``` * Http请求返回失败的回调事件 ```cpp HttpRequest &onFailed(std::function lambda); HttpRequest &onFailed(std::function lambda); HttpRequest &onFailed(std::function lambda); ``` ### 例子: ```cpp client.get("https://qthub.com") .onSuccess([](QString result) { qDebug()<<"result:"< lambda); ``` ### 例子: ```cpp client.get("https://qthub.com") .onSuccess([](QString result) { qDebug()<<"result: " << result.left(10); }) .onDownloadProgress([](qint64 bytesReceived, qint64 bytesTotal) { qDebug() << "lambda bytes received: " << bytesReceived << "bytes total: " << bytesTotal; }) .onFailed([](QString error) { qDebug()<<"error: " << error; }) .exec(); ``` ## 2.5 post 上传文件并获取上传进度 ### 接口: ```cpp HttpRequest &onUploadProgress(const QObject *receiver, const char *method); HttpRequest &onUploadProgress(std::function lambda); ``` ### 例子: ```cpp client.post("http://httpbin.org/post") .bodyWithFile("text_file", "helloworld.txt") .onUploadProgress([](qint64 bytesSent, qint64 bytesTotal) { qDebug() << "lambda bytes sent: " << bytesSent << "bytes total: " << bytesTotal; }) .onSuccess([](QString result) { qDebug()<<"result: " << result.left(100); }) .onFailed([](QString error) { qDebug()<<"error: " << error; }) .exec(); ``` ## 2.6 自定义超时时间和超时处理 - timeout(ms)是设置超时时间,单位为毫秒(ms)。 - onTimeout 为超时回调,当超时事件触发,自动调用 onTimeout 回调。 ### 接口: * 设置超时时间 ```cpp HttpRequest &timeout(const int &msec = -1); ``` * 设置超时的回调函数 ```cpp HttpRequest &onTimeout(const QObject *receiver, const char *method); HttpRequest &onTimeout(std::function lambda); HttpRequest &onTimeout(std::function lambda); ``` ### 例子: ```cpp client.get("https://qthub.com") .onSuccess([](QString result) { qDebug()<<"result:"< &headers); ``` ### 例子: ```cpp client.post("https://example.com") .header("content-type", "application/json") .queryParam("key", "Hello world!") .body(R"({"user": "test"})") .onSuccess([](QString result){}) .onFailed([](QString error){}) .exec(); ``` ## 添加 params ### 接口: ```cpp HttpRequest &queryParam(const QString &key, const QVariant &value); HttpRequest &queryParams(const QMap ¶ms); ``` ### 例子: ```cpp client.get("https://example.com") .queryParam("key1", "value1") .queryParam("key2", "value2") .queryParam("key3", "value3") .onSuccess([](QString result){}) .onFailed([](QString error){}) .exec(); ``` 上面代码等同于: ```cpp client.get("https://example.com?key1=value1&key2=value2&key3=value3") .onSuccess([](QString result){}) .onFailed([](QString error){}) ``` ## 2.9 添加 body ### 接口: - 原始数据 ```cpp HttpRequest &body(const QByteArray &raw); HttpRequest &bodyWithRaw(const QByteArray &raw); ``` - json 数据 ```cpp HttpRequest &body(const QJsonObject &json); HttpRequest &bodyWithJson(const QJsonObject &json); ``` - 表单数据 ```cpp HttpRequest &body(const QVariantMap &formUrlencodedMap); HttpRequest &bodyWithFormUrlencoded(const QVariantMap &keyValueMap); ``` - 混合消息 ```cpp HttpRequest &body(QHttpMultiPart *multiPart); HttpRequest &bodyWithMultiPart(QHttpMultiPart *multiPart); ``` - 文件消息 ```cpp HttpRequest &body(const QString &key, const QString &file); HttpRequest &bodyWithFile(const QString &key, const QString &file); HttpRequest &bodyWithFile(const QMap &fileMap); ``` ### 例子: #### 发送原始数据 ```cpp client.post("http://httpbin.org/post") .body("hello world") .onSuccess([](QString result){qDebug()<open(QIODevice::ReadOnly); file->setParent(multiPart); QString dispositionHeader = QString("form-data; name=\"%1\";filename=\"%2\"") .arg("text_file") .arg(file->fileName()); QHttpPart part; part.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain")); part.setHeader(QNetworkRequest::ContentDispositionHeader, dispositionHeader); part.setBodyDevice(file); multiPart->append(part); QString contentType = QString("multipart/form-data;boundary=%1").arg(multiPart->boundary().data()); HttpClient client; client.post("http://httpbin.org/post") .header("content-type", contentType) .body(multiPart) .onSuccess([](QString result){ qDebug()<request().attribute(QNetworkRequest::User); qDebug()<< value.toString(); }) .onFailed([](QString error){ qDebug()< lambda); HttpRequest &onDownloadSuccess(std::function lambda); HttpRequest &onDownloadFailed(const QObject *receiver, const char *method); HttpRequest &onDownloadFailed(std::function lambda); HttpRequest &onDownloadFailed(std::function lambda); ``` ### 例子: ```cpp client.get("https://hub.fastgit.org/aeagean/QtNetworkService/archive/refs/heads/master.zip") .download() // 启用默认文件名字下载 .onDownloadProgress([](qint64 bytesReceived, qint64 bytesTotal) { // 下载进度 qDebug() << "bytes received: " << bytesReceived << "bytes total: " << bytesTotal; }) .onDownloadSuccess([](QString fileName) { qDebug()<<"download success: "< lambda); ``` ### 例子: ```cpp client.get("xxx://httpbin.org/get") .retry(2) // 失败重试的次数 .onRetried([](){qDebug()<<"retried!";}) // 失败重试操作完成后的回调 .onSuccess([](QString result){qDebug()< lambda); ``` ### 例子: ```cpp client.get("https://httpbin.org/get") .repeat(3) // 总共重复请求的次数 .onRepeated([](){qDebug()<<"repeated!";}) // 重复请求操作完成后的回调 .onSuccess([](QString result){qDebug()< 微信公众号:Qt君

Qt君

# 源码地址 https://github.com/aeagean/QtNetworkService