Hi, guys!
I want to get user data from the GPRS networking using HTTP protocol. But the server request the authentication using digest.
I looked up in the Symbian SDK documentation and found the "MHTTPAuthenticationCallback" may do this work.
I inherented the class and implemented the GetCredentialsL function. But when i send the "GET" operation to the server, the server give a response of "401" message, but the program don't do nothing and GetCredentialsL method is also not called.
So i want someone give some suggestions or why it doesn't work.
Thanks in advance!
My code snippet is followed below:
Code:void CHttpHandler::ConstructL() { iSession.OpenL(); InstallAuthenticationL(iSession); } void CHttpHandler::SendGetL( const TDesC8& aURI, const TDesC8& aETag) { TUriParser8 uriParser; uriParser.Parse( aURI); RStringF getMethod = iSession.StringPool().StringF(HTTP::EGET, RHTTPSession::GetTable()); iTransaction = iSession.OpenTransactionL( uriParser, *this, getMethod); RHTTPHeaders hdr = iTransaction.Request().GetHeaderCollection(); if ( aETag != KNullDesC8) SetHeaderL( hdr, HTTP::EIfMatch, aETag); SetHeaderL( hdr, KXCAPIden, iUserUri); iTransaction.SubmitL(); } TBool CHttpHandler::GetCredentialsL( const TUriC8& aURI, RString aRealm, RStringF aAuthenticationType, RString& aUsername, RString& aPassword) { TBuf<KURIBufferSize> authType; TBuf<KURIBufferSize> uri; TBuf<KDefaultBufferSize> authText; authType.Copy(aAuthenticationType.DesC()); uri.Copy(aURI.UriDes()); _LIT(KAuthRequired, "%S requires %S authentication."); authText.Format(KAuthRequired, &uri, &authType); _LIT(KAuthNote, "Authentication required."); RLog::Log( KAuthNote ); TBuf8<KDefaultBufferSize> userName; TBuf8<KDefaultBufferSize> password; _LIT8(KUserName, "sip:user7@example.com"); _LIT8(KPswd, "123"); userName = KUserName(); password = KPswd(); TBuf8<KDefaultBufferSize> temp; temp.Copy(userName); TRAPD(err, aUsername = aRealm.Pool().OpenStringL(temp)); if (!err) { temp.Copy(password); TRAP(err, aPassword = aRealm.Pool().OpenStringL(temp)); if (!err) return ETrue; } return EFalse; }



