Wenn ich eine Antwort von HttpWebRequest
mit HttpWebRequest.Headers.Add("Cookie",value)
vs HttpWebRequest.CookieContainer
bekomme und die Ergebnisse sind unterschiedlich.
Also, was ist der Unterschied zwischen ihnen und wann sie zu verwenden sind.
Aus meiner Erfahrung hatte ich Probleme mit der Verwendung von HttpWebRequest.CookieContainer
für die Verwaltung von Cookies. Es kann zu einem gewissen Grad funktionieren, aber manchmal sind Cookies nicht RFC-konform und werden nicht korrekt in CookieContainer
geparst. Wenn Sie Ihre Cookies manuell verwalten, indem Sie sie dem Cookie-Header der Anfrage hinzufügen, haben Sie mit bestimmten Websites, die nicht RFC-kompatibel sind, einen besseren Erfolg. Eines der Probleme mit CookieContainer
besteht darin, dass wenn ein Datum mit einem Komma in dem Datum wie "26. September 2013" vorhanden ist, es das Ganze als separates Cookie analysiert und die Analyse unterbricht. Ein weiteres Problem ist, dass Cookies, die auf einem HTTP 302
redirect gesetzt sind, nicht von CookieContainer
übernommen werden.
Es liegt an Ihnen, was für Ihre spezifischen Anforderungen das Beste ist. Wenn jedoch die Probleme mit CookieContainer
andere Ergebnisse liefern als das manuelle Setzen der Cookie-Kopfzeile, würde ich empfehlen, die Cookie-Kopfzeile manuell festzulegen. Hoffentlich wird Microsoft dies in der Zukunft aktualisieren, so dass wir wieder die netten .NET-Klassen für die Verwaltung von Cookies verwenden können.
Bearbeiten:
Ich stieß auf einen Code, der einen Header "Set-Cookie" richtig analysiert. Es behandelt durch Kommas getrennte Cookies und extrahiert den Namen, den Ablauf, den Pfad, den Wert und die Domäne jedes Cookies.
Dieser Code funktioniert besser als Microsofts eigener Cookie-Parser und das ist wirklich, was der offizielle Cookie-Parser tun sollte. Ich habe keine Ahnung, warum Microsoft dies noch nicht behoben hat, da es ein sehr häufiges Problem ist.
Hier ist der ursprüngliche Code: Ссылка
Ich poste es hier für den Fall, dass der Link irgendwann abstürzt:
%Vor%Tags und Links c# httpwebrequest http-headers cookies cookiecontainer