主要更新内容:添加了身份验证的支持。
当带有身份验证的请求时,我们需要填写用户名和密码等信息,但QNetworkAccessManager
操作略显繁琐,所以特意封装了一下,简化用户操作。并在此基础上添加自动填写用户信息
,验证次数限制
和错误处理
等功能。
HttpRequest &autoAuthenticationRequired(const QAuthenticator &authenticator);
HttpRequest &autoAuthenticationRequired(const QString &user, const QString &password);
inline HttpRequest &onAuthenticationRequired(const QObject *receiver, const char *method);
inline HttpRequest &onAuthenticationRequired(std::function<void (QAuthenticator *)> lambda);
变量 | 解释 |
---|---|
count < 0 | 不限制验证次数 |
count = 0 | 不验证 |
count = 1 | 限制验证1次(默认值) |
count > 0 | 限制count次 |
inline HttpRequest &authenticationRequiredCount(int count = 1);
inline HttpRequest &onAuthenticationRequireFailed(const QObject *receiver, const char *method);
inline HttpRequest &onAuthenticationRequireFailed(std::function<void ()> lambda);
inline HttpRequest &onAuthenticationRequireFailed(std::function<void (QNetworkReply *)> lambda);
client.get("https://httpbin.org/basic-auth/admin/123456")
.onAuthenticationRequired([](QAuthenticator *authenticator) {
authenticator->setUser("admin");
authenticator->setPassword("123456");
qDebug() << "=============";
})
.onSuccess([](QString result){qDebug()<<"success: "<<result;})
.onFailed([](QString err){qDebug()<<"failed: "<<err;})
.exec();
client.get("https://httpbin.org/basic-auth/admin/123456")
.autoAuthenticationRequired("admin", "123456")
.onSuccess([](QString result){qDebug()<<"success: "<<result;})
.onFailed([](QString err){qDebug()<<"failed: "<<err;})
.exec();
client.get("https://httpbin.org/basic-auth/admin/123456")
.authenticationRequiredCount(2) // 最大重试验证次数为2次(默认值为1次)
.onAuthenticationRequired([](QAuthenticator *authenticator) {
authenticator->setUser("admin");
authenticator->setPassword("1234563"); // 错误输入
})
.onAuthenticationRequireFailed([](){ // 验证身份失败的回调
qDebug() << "authentication failed!";
})
.onSuccess([](QString result){qDebug()<<"success: "<<result;})
.onFailed([](QString err){qDebug()<<"failed: "<<err;})
.exec();
autoAuthenticationRequired
和onAuthenticationRequired
不能同时使用,因为它们是互斥实现。如不慎同时使用,只会生效autoAuthenticationRequired
操作。https://github.com/aeagean/QtNetworkService