QnetworkAccessManager의 QT HTTP 인증
-
11-09-2019 - |
문제
유효한 사용자 이름/비밀번호가 필요한 웹 서비스로 작업하고 있습니다. pyqt에서 나는 qnetworkaccessmanager를 사용하여 웹 서비스에 액세스하고 있습니다.
authenticationRequired (QNetworkReply*, QAuthenticator*)
신호 (명백히) 인증이 필요한 경우. Qauthenticator의 사용자와 PSSWD를 작성하면 모든 것이 잘 작동합니다. 그러나 사용자가 ~ 아니다 유효한.
AuthenticationRequired의 문서에서 :
"자격 증명을 거부하면이 신호가 다시 방출됩니다."
유효하지 않은 자격 증명의 경우이 신호는 다시 반복됩니다. 그리고 다시 ... 답장의 오류 코드를 보면 0이 나타났습니다.
해결책
예, 이상 해요. 이전에 한 일은 이미 해당 세부 사항을 인증했는지 확인하고 전화했는지 확인하는 것입니다. QNetworkReply.abort()
다른 팁
시도하는 것은 어떻습니까 :
QNetworkReply::abort()
또는
QNetworkReply::close()
?
부름 QNetworkReply::abort()
원래 401 오류 대신 '조작 중단'오류로 요청이 실패하게됩니다. 지금해야 할 정확한 일은 전화하지 않는 것 같습니다. QAuthenticator::setUser()
또는 QAuthenticator::setPassword()
당신의 내부 authenticationRequired()
슬롯. 이것은 떠날 것입니다 QAuthenticatorPrivate::phase
~처럼 Done
올바른 오류 코드로 요청이 깨끗하게 종료 될 수 있습니다.
이 시점에서 QT 문서는 다소 불분명합니다.
이것은 QT 4.7의 행동이 아닌 것으로 보이며 QT 4.8의 어느 시점에서 소개되었습니다.
qauthenticator 메소드를 호출하지 않고 & qnetworkaccessmanager :: proxyauthenticationCesticationRequired에 연결된 슬롯에서 돌아 오면 실제 HTTP 코드 (예 : 401 또는 407)로 요청이 중단됩니다.
예를 들어, 사용자가 클릭을 클릭하고 클릭이 취소 될 때 아무것도 전화하지 않으면 Qauthenticator :: SetUser 및 SetPassword를 호출 할 수 있습니다. 그게 다야 :-)
이것은 & qnetworkaccessmanager :: AuthenticationRequired에 연결된 슬롯에도 해당됩니다 (qnetworkreply :: abort ()를 전혀 호출 할 수있는 경우 qauthenticator 메소드를 전혀 호출 할 수 있습니다. ).