2009-03-12 12 views
6

Je suis un gars des systèmes et je fais actuellement un projet de développement web à temps partiel, donc je suis assez nouveau pour cela. J'essaie d'écrire un client http pour www.portapower.com.HttpWebRequest et l'authentification des formulaires en C#

Il sera pour certains articles qui sont affichés sur le site Web et si elles correspondent à une exigence particulière, il imprimera un message.

Tout en essayant d'accéder à cette page:

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

Le site me redirige vers une page de registre par défaut:

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

Voici un extrait de ce que je codé:

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

J'ai le nom d'utilisateur et le mot de passe et cela fonctionne très bien lorsqu'il est utilisé à partir d'un navigateur. S'il vous plaît dites-moi si c'est une manière correcte d'accéder à une page authentifiée.

Répondre

6

Cela dépend de la manière dont le site Web authentifie les utilisateurs. S'ils utilisent l'authentification de base ou l'authentification Windows, vous pouvez définir le Credentials property du HttpWebRequest class aux informations de nom d'utilisateur/mot de passe/domaine et cela devrait fonctionner. Cependant, il semble que vous deviez entrer le nom d'utilisateur/mot de passe sur le site, ce qui signifie que vous devrez d'abord vous connecter au site. En regardant la page principale, ce que je trouve dans l'élément <form> qui gère la connexion:

<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> 

J'ai inclus seulement les parties pertinentes.

Compte tenu de cela, vous devez aller à la page ./defalogin.php d'abord avec la HttpWebRequest et les valeurs POST emtext et pstext. En outre, veillez à définir le CookieContainer property sur une instance de CookieContainer. Lorsque cet appel à POST reviendra, il sera plus que probablement rempli d'un cookie que vous devrez renvoyer sur le site. Continuez à définir la propriété CookieContainer sur toutes les instances HttpWebRequest suivantes à CookieContainer pour vous assurer que les cookies sont transmis.

Ensuite, vous iriez à la page indiquée dans le lien.

La fonction javascript est également préoccupante, mais en regardant les sources de script, elle ne fait rien de remarquable.

0

La classe NetworkCredential sert vraiment à contrôler les informations d'identification Windows (NTLM, Kerberos, etc.).

Ce site est un site PHP fonctionnant sur Apache, donc je ne pense pas qu'ils utilisent NTLM ou kerberos.

Ce que vous voulez faire est de poster des champs FORM sur le site, puis conservez le cookie que vous récupérez. Assurez-vous, lors des demandes suivantes, de repasser le cookie sur le site afin qu'il sache que vous êtes déjà connecté.

1

Vous ne pouvez pas faire cela de cette façon; les informations d'identification que vous transmettez peuvent être utilisées avec un schéma d'authentification de base (c'est-à-dire que, dans le navigateur, une boîte de dialogue nom d'utilisateur/mot de passe apparaît). Vous devrez simuler l'entrée des données dans ce formulaire. connectez-vous au cookie et utilisez-le.

2

Les informations d'identification que vous transmettez sont destinées à l'authentification Windows. Vous devez soumettre des données post avec des données qui imite la soumission d'un formulaire puis CapTrue l'ensemble des cookies de session dans la réponse ans utiliser ce cookie pour les futures demandes

Jetez un oeil à cette réponse qui a le code pour le faire:

Login to the page with HttpWebRequest

Questions connexes