Question

Je suis un spécialiste des systèmes et je travaille actuellement à un projet de développement Web à temps partiel. Je suis donc assez novice. J'essaie d'écrire un client http pour www.portapower.com.

Il le fera pour certains éléments publiés sur le site Web et, s’ils répondent à une exigence particulière, il imprimera un message.

En essayant d'accéder à cette page:

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

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

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

Voici un extrait de ce que j'ai 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 correctement si vous l'utilisez depuis un navigateur. Dites-moi s'il s'agit d'un moyen correct d'accéder à une page authentifiée.

Était-ce utile?

La solution

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 propriété de la HttpWebRequest classe les 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, voici ce que je trouve dans l'élément <form> qui gère l'identifiant:

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

Je n'ai inclus que les parties pertinentes.

Étant donné cela, vous devez d'abord accéder à la page ./defalogin.php avec les valeurs emtext et POST les valeurs pstext et CookieContainer. Vérifiez également que vous avez défini le logincheck property à une instance de <=> . Lorsque cet appel à POST revient, il est plus que probable qu'il sera rempli d'un cookie que vous devrez renvoyer sur le site. Continuez simplement à définir la propriété <=> sur toutes les <=> instances ultérieures sur celle-ci <=> pour vous assurer que les cookies sont transmis.

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

La <=> fonction javascript est également un sujet de préoccupation, mais si vous regardez les sources du script, cela ne fait rien de remarquable.

Autres conseils

Les informations d'identification que vous transmettez concernent l'authentification Windows. Vous devez soumettre des données de publication avec des données qui imitent la soumission d’un formulaire, puis capturer le cookie de session défini dans la réponse et utiliser ce cookie pour les demandes futures.

Regardez cette réponse qui contient le code pour le faire:

Connectez-vous à la page avec HttpWebRequest

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

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

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

Ce que vous voulez faire, c'est poster quelques champs FORM sur le site, puis conserver le cookie que vous récupérez. Veillez à repousser le cookie sur le site lors de demandes ultérieures pour qu'il sache que vous êtes déjà connecté.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top