找回密码
 立即注册
收起左侧

Qt https 用户认证authenticationRequired()

3
回复
7378
查看
[复制链接]

尚未签到

来源: 2016-11-27 10:01:06 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 taiq 于 2016-11-28 08:59 编辑

QNetworkAccessManager以POST方式访问https
需要用户认证,所以用SIGNAL(authenticationRequired(QNetworkReply *, QAuthenticator *))

    manager = new QNetworkAccessManager(this);    connect(manager, SIGNAL(authenticationRequired(QNetworkReply *, QAuthenticator *)),
            this, SLOT(onAuthenticationRequest(QNetworkReply *, QAuthenticator *)));

以POST访问

    QByteArray postdata;   
    reply = manager->post(QNetworkRequest(url), postdata);

却不会运行SLOT(onAuthenticationRequest(QNetworkReply *, QAuthenticator *))


怎么也查不出原因


用wget https://xxx.xxxxx.xxx/xxxx  --no-check-certificate --post-data="" --user=username --password=pass
可以正确获取

回复

使用道具 举报

尚未签到

2016-11-28 08:56:35 显示全部楼层
加上
#ifndef QT_NO_SSL
    connect(manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)),
            this, SLOT(sslErrors(QNetworkReply*,QList<QSslError>)));
#endif


#ifndef QT_NO_SSL
void MainWindow::sslErrors(QNetworkReply *reply,const QList<QSslError> &)
{
    reply->ignoreSslErrors();
}
#endif

解决问题
回复

使用道具 举报

尚未签到

2016-11-28 23:37:03 显示全部楼层
刚想说,发现你自己解决了,反正就是因为qt自己没有**验证的功能,会出现ssl的错误,也可以自己带**来完成验证
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2017-2-16 03:30:33 显示全部楼层
问题解决只是表象,关键是你的Qt没有包含SSL编译项,否则根本不会出现这个问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了