您可以在任何地方找到的一般答案是使用Signal authenticationRequired(QNetworkReply*, QAuthenticator*)
,然後將登錄憑證填充到給定的QAuthenticator對象中。使用QNetworkAccessManager通過HTTPS下載文件:如何進行身份驗證?
但是,這不適用於我的情況,因爲該信號永遠不會發射。原因:服務器不返回授權失敗,而是將我重定向到登錄頁面。所以我的程序只會下載那個頁面。
我已經發現如何通過檢查QNetworkReply的屬性QNetworkRequest::RedirectionTargetAttribute
來解決這個問題。 所以我可以檢測到重定向並詢問用戶身份驗證信息。
但是......我從哪裏去?我如何設置驗證數據?我可以手動將QAuthenticator設置爲我的QNetworkRequest或我的QNetworkAccessManager?我沒有找到辦法做到這一點,只是通過上面提到的信號/插槽機制,因爲它不會觸發不起作用。
任何幫助將不勝感激!
感謝您的回覆。我想我可以建立一些你建議用於服務器和登錄表單的東西(「2.根據表單需要將正確的憑證傳遞給服務器」)。但是這不是一個令人滿意的解決方案,因爲我希望它能夠與任何https連接一起工作。 至於auth方法:我嘗試只傳遞基本身份驗證與網址,這是行不通的。至於NTLM 2和Digest-MD5,我甚至不知道......我無法嘗試,因爲我無法將認證信息傳遞給服務器。 – user3782412
好吧,我最終做了你的建議,除了用POST所需的登錄憑證來做POST之外 - 這很難做到,因爲這個POST必須專門針對登錄頁面的需求 - 我使用一個QWebView(連接我的QNetworkAccessManager)只顯示登錄頁面本身。用戶必須登錄,然後才能從Access Manager的QNetworkCookieJar獲取cookie,並將其傳遞給新的下載請求。 它應該適用於任何頁面,因爲我使用的是原始登錄機制。 再次感謝您的幫助! – user3782412