Wie kann ich die Authentifizierung mit HttpWebRequest verdauen?
Verschiedenen Artikeln (Eins, Zwei) entdeckte ich machen diesen look einfach genug:
WebRequest request = HttpWebRequest.Create(url);
var credentialCache = new CredentialCache();
credentialCache.Add(
new Uri(url), //request url
"Digest", //authentication type
new NetworkCredential("user", "password") //credentials
);
request.Credentials = credentialCache;
Allerdings funktioniert dies nur für URLs ohne URL-Parameter. Ich kann zum Beispiel download http://example.com/test/xyz.html
ganz gut, aber wenn ich versuche, die download http://example.com/test?page=xyz
, das Ergebnis ist ein 400 Bad Request-Nachricht mit dem folgenden in den server-logs (Apache 2.2):
Digest: uri mismatch - </test> does not match request-uri </test?page=xyz>
Meine erste Idee war, dass die digest-Spezifikation erfordert, URL Parameter entfernt werden, aus dem hash-digest -- aber das entfernen der parameter aus der URL übergeben credentialCache.Add()
nicht ändern, eine Sache. Also muss es anders herum sein und irgendwo in der .NET framework ist falsch das entfernen der parameter aus der URL.
InformationsquelleAutor der Frage Cygon | 2010-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sagte Sie, Sie entfernt die querystring-Parameter, aber haben Sie versucht, gehen den ganzen Weg zurück, nur der host? Jedes einzelne Beispiel von CredentialsCache.Add (), die ich gesehen habe scheint nur noch die Gastgeber, und die docs für CredentialsCache.Add() Liste der Uri-parameter als "uriPrefix", das scheint zu erzählen.
In anderen Worten, versuchen Sie dies:
Wenn das funktioniert, werden Sie auch haben, um sicherzustellen, dass Sie nicht die gleichen "Autorität", um den cache mehr als einmal... alle Anfragen an den gleichen host sollte in der Lage sein, um es mit der gleichen Berechtigung cache-Eintrag.
InformationsquelleAutor der Antwort JaredReisinger
Code aus diesem post gearbeitet hat perfekt für den mich Implementieren Sie die Digest-Authentifizierung via HttpWebRequest-Klasse in C#
Hatte ich Folgendes Problem, immer wenn ich browser die feed-url in einen browser, fragte Sie nach Benutzername und Passwort und fein gearbeitet, jedoch alle der oben genannten code-Beispiele wurden nicht funktioniert, auf die Inspektion von Anfrage - /Antwort-Header (in-web-Entwickler-tools in firefox) konnte ich sehen, header mit Genehmigung der Typ verdauen.
Schritt 1 Hinzufügen:
}
Schritt 2: Rufen Sie die neue Methode
wenn Url: http://xyz.rss.com/folder/rss
dann
domain: http://xyz.rss.com (mit domain-Teil)
dir: /Ordner/rss - (rest-url)
könnte man auch wieder als stream und verwenden XmlDocument Load () - Methode.
InformationsquelleAutor der Antwort Mvg Developer
Die Lösung ist, um diesen parameter aktivieren im apache:
Mehr info : http://httpd.apache.org/docs/2.0/mod/mod_auth_digest.html#msie
Dann fügen Sie diese Eigenschaft in Ihrem code für die webrequest-Objekt:
es funktioniert sehr gut für mich
InformationsquelleAutor der Antwort drmed
Ich denke, dass die zweite URL verweist auf die dynamische Seite und sollten Sie zunächst rufen Sie es verwenden, um die HTML-und dann, um es herunterzuladen. Keine Erfahrung in diesem Bereich, obwohl.
InformationsquelleAutor der Antwort Neutralizer