J'ai le code suivant pour vous connecter à une application externe d'application (ASP.NET APP) à partir d'un formulaire de connexion local (écrit en PHP):
<?php $curl_connection = curl_init('www.external.com/login.aspx'); curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); // Post data array $post_data['LoginControl$UserName'] = 'ExampleUName'; $post_data['LoginControl$Password'] = 'ExamplePWord'; // Add form fields into an array to get ready to post foreach ($post_data as $key => $value) { $post_items[] = $key . '=' . $value; } $post_string = implode ('&', $post_items); // Tell cURL which string to post curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); // Execute and post $result = curl_exec($curl_connection); ?>
4 Réponses :
Modification: à: p> Vous devez également configurer un fichier de cookie, jetez un oeil à curlopt_cookiefile p> Le nom du fichier contenant les données de cookie. Le fichier de cookie peut être au format Netscape, ou juste des en-têtes de style HTTP uni largués dans un fichier. P> Le contenu de la "cookie : "L'en-tête doit être utilisé dans la demande HTTP. Notez que plusieurs cookies sont séparés avec un point-virgule suivi d'un espace (par exemple, "fruit = pomme; couleur = rouge") p> il Nom d'un fichier pour enregistrer tous les cookies internes à lorsque la connexion se ferme. P> @See http://www.php.net/manual/fr/function.curl-setopt.php p> curlopt_cookiefile code>: p>
curlopt_cookie code>: p>
curlopt_cookiejar p>: p>
Merci - a ajouté ceux-ci mais viennent encore d'être dirigé vers la forme de connexion sur le site externe.
Cela semble être un vrai problème lorsque vous essayez de gratter les pages ASP.NET. P>
Les pages contiennent un champ caché nommé "__viewstate" qui contient un ensemble codé de base64 de VA; UES contenant tout ou partie de l'état de la page lorsque la page a été envoyée. Il contient généralement également le SHA1 de la vue. P>
Qu'est-ce que cela signifie que votre message doit tout contenir dans le _viewstate ou échouera. p>
J'ai pu poster une page de connexion simple qui n'a que 2 champs, mais pas une page plus complexe dans laquelle l'auteur a choisi de mettre l'état de la page entière dans la vieilletate. p>
Pourtant, je n'ai pas pu proposer une solution. P>
Merci pour la réponse ed. J'étais également venu à la conclusion que c'était due aux valeurs de la vie d'opinion.
Ne vous attendez pas à ce qu'il fonctionne sans encoder la chaîne __viewstate de PHP en utilisant p>
RawurlenCode ($ Viewstate); p>
J'ai rencontré le même problème récemment, alors je quitte simplement ma façon d'y aller ici, au cas où quelqu'un d'autre trébuche sur ce fil à la recherche d'une réponse aussi. P>
J'ai résolu ceci en précisant toutes les demandes postales avec une demande d'accès à la même URL, et en raclant tous les champs de saisie dans un tableau de paires de la valeur de clé hors de la réponse à partir de celle-ci. Ensuite, j'ai remplacé certaines valeurs de cette matrice (valeurs de connexion de connexion, par exemple) et renvoyé le tout dans le poste suivant. De cette façon, ma demande de poste contenait toutes les données valides __viewstate, __eventValidator et yada-yada générées pour cette URL particulière. P>
De cette façon, le site m'a permis de me connecter et de visiter les sous-domaines normalement. P>