2009-03-12 16 views
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.HttpWebRequest y autenticación de formularios en C#

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 tratar de acceder a esta página:

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

El sitio web me redirecciona a una página de registro por defecto:

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.

Respuesta

6

Depende de cómo esté autenticando el sitio el usuario. Si utilizan autenticación básica o autenticación de Windows, puede configurar Credentials property del HttpWebRequest class en 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. En cuanto a la página principal, esto es lo que encuentro en el elemento <form> que se encarga de entrada:

<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 sólo las partes pertinentes.

Ante esto, usted tiene que ir a la página de ./defalogin.php primero con el HttpWebRequest y POST los emtext y pstext valores. Además, asegúrese de configurar el CookieContainer property 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 propiedad CookieContainer en cualquier instancia posterior de HttpWebRequest en esa CookieContainer para asegurarse de que se pasen las cookies.

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

También es preocupante la función logincheck javascript, pero mirando las fuentes del script, no tiene nada de especial.

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, por lo que no creo que estén usando NTLM o kerberos.

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

1

No puede 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.

2

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

Mire esta respuesta que tiene el código para hacer esto:

Login to the page with HttpWebRequest

Cuestiones relacionadas