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());
}
War es hilfreich?

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top