您可以在任何地方找到的一般答案是使用Signal authenticationRequired(QNetworkReply*, QAuthenticator*)
,然后将登录凭据填充到给定的QAuthenticator对象中。
然而,这在我的情况下不起作用,因为该信号永远不会发出。原因:服务器未返回授权失败,而是将我重定向到登录页面。所以我的程序只会下载该页面。
我已经找到了如何通过检查QNetworkReply的属性QNetworkRequest::RedirectionTargetAttribute
来捕获它。
所以我可以检测到重定向并要求用户提供身份验证信息。
但是......我从哪里去?如何设置身份验证数据?我可以手动设置QAuthenticator到我的QNetworkRequest或我的QNetworkAccessManager吗?我没有找到办法在任何地方做到这一点,只是通过上面提到的信号/插槽机制,因为它不会触发,因此不起作用。
非常感谢任何帮助!
答案 0 :(得分:0)
来自文档,
http://qt-project.org/doc/qt-5/qauthenticator.html
QAuthenticator支持以下身份验证方法:
- 基本
- NTLM第2版
- 文摘-MD5
由于您被重定向到登录页面,并且您尚未指出上述任何一种身份验证方法是否有效,我将假设它不会,因为发送了基本身份验证之类的内容对服务器的每个请求。登录页面通常对客户端进行身份验证,并使用某种cookie进行身份验证。为此,
有关Cookie的信息,您可以通过Wikipedia获取概述,但要实施,您需要查看RFC 6265,
如果这不正确,并且您可以使用基本身份验证,则该信息将在URL本身中传递。在QUrl中设置用户名和密码,如果有效,则不会重定向。 http://qt-project.org/doc/qt-5/qurl.html#setPassword