Hoe omgaan met een "(401) Unauthorized" error?

Status
Niet open voor verdere reacties.

SteveFH

Gebruiker
Lid geworden
8 mrt 2010
Berichten
20
Goedemorgen. :)

Ik ben bezig een Update Client te schrijven voor de DNS service 'No-IP.com'. Het inloggen op de server gaat goed, alleen het afhandelen van de "(401) Unauthorized" error loopt niet helemaal lekker. Dit is de code die de server om een update verzoekt en vervolgens de gebruiker een foutmelding geeft als de server een 401 error antwoordde.

Code:
 Try

            ' Set the update URL
            Dim UpdateURI As String = "https://dynupdate.no-ip.com/nic/update?hostname=" + My.Settings.Hostname

            ' Add a new credential for this account
            Dim LoginCredentials As CredentialCache = New CredentialCache
            LoginCredentials.Add(New Uri("https://dynupdate.no-ip.com/nic/update?hostname=" + My.Settings.Hostname), "Basic", New NetworkCredential(My.Settings.Username, My.Settings.Password))

            ' Set other variables
            Dim webStream As Stream
            Dim webResponse = ""
            Dim req As HttpWebRequest
            Dim res As HttpWebResponse

            ' Start request process
            req = WebRequest.Create("https://dynupdate.no-ip.com/nic/update?hostname=" + My.Settings.Hostname)

            ' Set requiered User Agent and set request method to 'GET'
            req.UserAgent = "User-Agent: DNS Update Client/1.0  stefan@sociapoint.com"
            req.Method = "GET"

            req.Credentials = LoginCredentials
            res = req.GetResponse()

            webStream = res.GetResponseStream()

            Dim webStreamReader As New StreamReader(webStream)

            While webStreamReader.Peek >= 0

                webResponse = webStreamReader.ReadToEnd()

            End While

            res.Close()
            webStreamReader.Close()

            MsgBox(webResponse)

        Catch ex As WebException

            If ex.Message.Contains("401") Then

                MsgBox("The username or password you've entered is incorrect.")

            End If

        End Try

Wanneer de client een 401 error terug krijgt, weergeeft hij netjes de foutmelding dat de gebruiker verkeerde inlog gegevens heeft ingevoerd. Het vervelende is alleen dat wanneer deze foutmelding 3 keer achter elkaar weergegeven is, de foutmelding niet meer weergegeven wordt. Het lijkt wel alsof de server dan gewoon geen 401 error meer geeft, terwijl de inlog gegevens wel nog steeds fout zijn.

Mijn vraag is nu: hoe kan ik ervoor zorgen dat er, wanneer de inlog gegevens onjuist zijn, altijd een foutmelding weergegeven wordt?

Ik begrijp het als mijn uitleg niet helemaal duidelijk is, ik weet alleen niet helemaal hoe ik het probleem anders kan beschrijven. :confused:

Alvast bedankt! :)
 
Steve,

De foutmelding word inderdaad 3x achter elkaar gegeven, daarna word de client een tijdje "geband" van de connectie voor een aantal minuten. De webpagina geeft vaak de tekst "Unauthorized access" weer, zonder error. Jouw code controleert nu op de "401" code terwijl er geen error word gegeven. Als het goed is kan je voor die tijd ook niet inloggen, zelfs al zijn de usercredentials wel goed.

Kijk wat de MsgBox(webResponse) zegt. Ik geef als voorbeeld "Unauthorized access.". Voeg het volgende hiertussen:

Code:
...
webStreamReader.Close()

            MsgBox(webResponse)

If webResponse.toLower.Contains("unauthorized") Then

                MsgBox("The username or password you've entered is incorrect. Login is disabled for 5 minutes.")

            End If

        Catch ex As WebException
...
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan