net httpget example c# .net https httpwebrequest

c# - httpget - httpwebrequest vb net example post



HttpWebRequest con https en C# (4)

Esta pieza de código no funciona; está iniciando sesión en el sitio web que utiliza el protocolo https. ¿Cómo resolver este problema? El código se detiene en GetRequestStream() en cualquier momento en cualquier lugar diciendo que la excepción de violación de protocolo no se ha manejado.

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()); }


Esto es lo que funciona para mí:

var request = WebRequest.Create(_url); request.PreAuthenticate = true; request.Credentials = new NetworkCredential(_userName, _password);


Es posible que también desee averiguar la longitud total de lo que está publicando, de antemano, y establecer eso como la Longitud del contenido de la solicitud. Ver MSDN :

Se lanza una excepción ProtocolViolationException en varios casos cuando las propiedades establecidas en la clase HttpWebRequest entran en conflicto. Esta excepción se produce si una aplicación establece la propiedad ContentLength y la propiedad SendChunked en true y luego envía una solicitud HTTP GET. Esta excepción se produce si una aplicación intenta enviar fragmentos a un servidor que solo admite el protocolo HTTP 1.0, donde esto no es compatible. Esta excepción se produce si una aplicación intenta enviar datos sin configurar la propiedad ContentLength o si SendChunked es falso cuando el almacenamiento en búfer está deshabilitado y en una conexión keepalive (la propiedad KeepAlive es verdadera).


Establezca el método de solicitud para publicar, antes de llamar a GetRequestStream

me gusta

request.Method = "POST"; using (StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.ASCII)) { writer.Write("nick=" + username + "&password=" + password); }


Supongo que el problema que está experimentando se debe al hecho (como han informado otros) de que está haciendo una solicitud GET en lugar de una solicitud POST. Además, noté que el nombre real para el campo de contraseña en esa página es "heslo" y no "contraseña". Este error no hará que el servidor web no devuelva una respuesta, pero causará otros problemas ya que el servidor está buscando ese nombre de variable específico que se publicará con el valor de la contraseña.