2 Stimmen

C# HttpWebRequest - PreAuthenticate: Gibt immer noch 401 forbidden zurück (HTTPS)

Ich möchte Sie um Hilfe für den folgenden Code bitten, den ich schnell geschrieben habe, da ich immer "403 FORBIDDEN" erhalte.

HttpWebRequest pozadavek = (HttpWebRequest)WebRequest.Create("LINK THAT ASKS FOR AUTHLOGIN"); //https
    System.IO.StreamReader stream = null;
    System.String result = null;
    public Form1()
    {
        InitializeComponent();
        pozadavek.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested;
        pozadavek.Credentials = new NetworkCredential("NAME", "PASS");
        pozadavek.PreAuthenticate = true;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        WebResponse webresponse = pozadavek.GetResponse(); //throws an exception:403 forbidden
        stream = new System.IO.StreamReader(webresponse.GetResponseStream());
        result = stream.ReadToEnd();
        this.webBrowser1.DocumentText = result;
    }

5voto

Peter Lillevold Punkte 32995

Die Website, die Sie zu öffnen versuchen, erfordert eine einfache Authentifizierung. Unterm Strich müssen Sie den Benutzernamen/das Kennwort in base64-Kodierung in Ihre Anfrage einfügen. Glücklicherweise erledigt .Net dies für Sie. Konstruieren Sie Ihre Anfrage wie folgt:

var credCache = new CredentialCache();
credCache.Add(new Uri("https://is.vsfs.cz/auth"), "Basic",
                  new NetworkCredential("user", "pwd"));
var request = (HttpWebRequest)WebRequest.Create(uri);
request.Credentials = credCache;

Hier ist ein Artikel in dem genauer erklärt wird, wie verschiedene Authentifizierungsverfahren in .Net gehandhabt werden.

0 Stimmen

Nein, mit "wahr" und "falsch" ist es dasselbe. Ich bin mir nicht sicher, ob das der richtige Weg ist. Wenn Sie den Link im Browser öffnen, wird ein Popup-Fenster geöffnet, in dem Sie nach Benutzernamen und Passwort gefragt werden.

0 Stimmen

Wenn die "Authentifizierung" über ein Popup erfolgt, wird sie zunächst clientseitig erzwungen. Ihre Anfrage wird das nie sehen. Es hört sich so an, als ob die Website eine Art von Formularauthentifizierung verwendet. Vielleicht können Sie eine direkte URL zur Anmeldeseite erhalten, aber selbst dann mit der Credentials-Eigenschaft wird wahrscheinlich nicht funktionieren, müssen Sie Benutzername/Pwd an die Seite mit einer POST-Anfrage senden.

0 Stimmen

Oh, ich kann sehen, dass es "https" gibt. Ich habe die URI im Programm geändert und erhalte jetzt 401... irgendwelche Ideen bitte?

0voto

Aleksandar Pavić Punkte 2813

Dieser Code funktioniert bei mir...

Uri address = new Uri("https://www.example.com");
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(address);
string authInfo = username + ":" +password;
authInfo = Convert.ToBase64String(Encoding.UTF8.GetBytes(authInfo));
request.Headers.Add("Authorization", "Basic " + authInfo);
NetworkCredential myCreds = new NetworkCredential(username, password);
request.Credentials = myCreds;
request.Method = WebRequestMethods.Http.Get;
request.AllowAutoRedirect = true;
request.Proxy = null;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X