HttpWebRequest mit https in C #
-
23-08-2019 - |
Frage
Dieses Stück Code funktioniert nicht; es ist in in Website anmelden, das https-Protokoll verwendet. Wie dieses Problem zu lösen? Der Code hält an GetRequestStream()
jederzeit und überall, dass Protokollverletzung Ausnahme sagen will, ist nicht behandelte ..
string username = "user";
string password = "pass";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://moje.azet.sk/prihlasenie.phtml?KDE=www.azet.sk%2Findex.phtml%3F");
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705)";
Console.WriteLine(request.GetRequestStream());
using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII))
{
writer.Write("nick=" + username + "&password=" + password);
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//Retrieve your cookie that id's your session
//response.Cookies
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
Console.WriteLine(reader.ReadToEnd());
}
Lösung
Set-Request-Methode zu schreiben, vor dem Aufruf GetRequestStream
wie
request.Method = "POST";
using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII))
{
writer.Write("nick=" + username + "&password=" + password);
}
Andere Tipps
Meine Vermutung ist, dass das Problem, das Sie erleben aufgrund der Tatsache ist (wie andere empfohlen haben), dass Sie eine GET-Anfrage anstelle einer POST-Anforderung tun. Außerdem bemerkte ich, dass der tatsächliche Name für das Passwort-Feld auf dieser Seite ist „heslo“ und nicht „Passwort“. Dieser Tippfehler wird nicht auf den Webserver dazu führen, nicht eine Antwort zurückgeben, aber es wird andere Probleme verursachen, da der Server für diesen bestimmten Variablennamen Suche mit dem Passwort Wert gebucht werden.
Sie möchten vielleicht auch die Gesamtlänge, um herauszufinden, was Sie veröffentlichen, vorher und festgelegt, dass als ContentLength des Antrags. Siehe MSDN :
Ein ProtocolViolationException wird in mehreren Fällen ausgelöst, wenn die Eigenschaften auf die eingestellte HttpWebRequest Klasse sind widersprüchlich. Diese Ausnahme tritt auf, wenn eine Anwendung setzt die ContentLength Eigenschaft und die SendChunked Eigenschaft auf true, und sendet dann eine HTTP-GET Anfrage. Diese Ausnahme tritt auf, wenn eine Anwendung versucht, auf einen Server Chunked zu senden, unterstützt nur HTTP 1.0-Protokoll, in denen dies nicht unterstützt wird. Diese Ausnahme tritt auf, wenn ein Anwendung versucht, Daten zu senden, ohne die ContentLength-Eigenschaft oder SendChunked ist falsch, wenn Pufferung gesperrt ist und auf einer Keep-Alive-Verbindung (die Keep-Alive-Eigenschaft ist true).
Hier ist, was für mich funktioniert:
var request = WebRequest.Create(_url);
request.PreAuthenticate = true;
request.Credentials = new NetworkCredential(_userName, _password);