Aquí podría ser tu PUBLICIDAD


HttpWebRequest y autenticación de formularios en C #

votos
6

Soy un chico de sistemas y actualmente estoy haciendo un proyecto de desarrollo web a tiempo parcial, por lo que soy bastante nuevo. Estoy tratando de escribir un cliente http para www.portapower.com.

Será para ciertos artículos que se publican en el sitio web y si coinciden con un requisito en particular, se imprimirá un mensaje.

Al intentar acceder a esta página:

http://www.portapower.com/getbainfo.php?fclasscode=1&code=CB1831B.40H&fbrand=QUNFUg==

El sitio web me redirige a una página de registro predeterminada:

http://www.portapower.com/defaregit.php

Aquí hay un fragmento de lo que codifiqué:

CookieContainer myContainer = new CookieContainer();

HttpWebRequest request = (HttpWebRequest)
WebRequest.Create(http://www.portapower.com/ + urlpart);
request.Credentials = new NetworkCredential(****, ******);
request.CookieContainer = myContainer;
request.PreAuthenticate = true;
request.Method = POST;
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();

Console.WriteLine(response.StatusCode);
Stream resStream = response.GetResponseStream();
Console.WriteLine(resStream.ToString());

Tengo el nombre de usuario y la contraseña y funciona bien cuando se usa desde un navegador. Por favor dígame si esta es una forma correcta de acceder a una página autenticada.

Publicado el 12/03/2009 a las 20:18
fuente por usuario nixbakshi
En otros idiomas...        العربية       

4 respuestas

votos
6

Depende de cómo el sitio web autentique a los usuarios. Si están utilizando autenticación básica o autenticación de Windows, entonces puede establecer la Credentialspropiedad de la HttpWebRequestclase a la información de nombre de usuario / contraseña / dominio y debería funcionar.

Sin embargo, parece que debe ingresar el nombre de usuario / contraseña en el sitio, lo que significa que primero tendrá que iniciar sesión en el sitio. Al mirar la página principal, esto es lo que encuentro en el <form>elemento que maneja el inicio de sesión:

<form name="formlogin" method="post" action="./defalogin.php" >
  <input name="emtext" type="text" id="emtext" size="12">
  <input name="pstext" type="password" id="pstext" size="12">
  <input type="submit" name="Submit" value="Logn in" 
    onClick="return logincheck()" >
</form>

He incluido solo las porciones relevantes.

Teniendo esto en cuenta, debe ir ./defalogin.phpprimero a la página con HttpWebRequesty a POST the emtexty pstextvalues. Además, asegúrese de establecer la CookieContainerpropiedad en una instancia de CookieContainer. Cuando regrese esa llamada a POST, es muy probable que se llene con una cookie que deberá enviar de vuelta al sitio. Simplemente siga configurando la CookieContainerpropiedad en cualquier HttpWebRequestinstancia posterior CookieContainerpara asegurarse de que se pasen las cookies.

Luego iría a la página indicada en el enlace.

También es preocupante la logincheckfunción javascript, pero mirando las fuentes del script, no tiene importancia.

Respondida el 12/03/2009 a las 08:30
fuente por usuario casperOne


Aquí podría ser tu PUBLICIDAD


votos
2

Las credenciales que está aprobando son para la autenticación de Windows. Debe enviar los datos de la publicación con datos que imiten el envío de un formulario, luego captar la cookie de la sesión establecida en la respuesta y usar esa cookie para futuras solicitudes.

Eche un vistazo a esta respuesta que tiene el código para hacer esto:

Inicie sesión en la página con HttpWebRequest

Respondida el 12/03/2009 a las 08:50
fuente por usuario rizzle

votos
1

No puedes hacerlo de esta manera; las credenciales que está aprobando se pueden usar con un esquema de autenticación básico (es decir, donde, en el navegador, aparece un diálogo de nombre de usuario / contraseña). Deberá simular la entrada de los datos en esa forma y atrapar el iniciar sesión cookie y usar eso.

Respondida el 12/03/2009 a las 08:29
fuente por usuario Joe

votos
0

La clase NetworkCredential es realmente para controlar las credenciales de Windows normales (NTLM, Kerberos, etc.).

Ese sitio es un sitio PHP que se ejecuta en Apache, así que no creo que estén usando NTLM o kerberos.

Lo que quiere hacer es publicar algunos campos de FORMULARIO en el sitio, luego guarde la cookie que recibe. Asegúrese de que en las solicitudes posteriores vuelva a insertar la cookie en el sitio para que sepa que ya ha iniciado sesión.

Respondida el 12/03/2009 a las 08:27
fuente por usuario NotMe