php curl - affichage asp.net l'état d'affichage de la valeur
J'ai le code suivant pour vous connecter à un site externe de l'application (asp.net app) à partir d'un site local formulaire de connexion (é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);
?>
- Je obtenir dirigé vers le formulaire de connexion du site externe au lieu d'être dirigé vers l'application connecté. Je pense que le problème est que j'ai besoin de passer de l'état d'affichage des valeurs à travers, mais je ne suis pas sûr de la façon de faire?
Je n'ai pas de contrôle sur l'application externe. Mais nous voulons que les utilisateurs soient en mesure de vous connecter à l'application par le biais de notre site web, afin de maintenir l'image de marque etc.
J'ai posté un couple de d'autres threads récemment au sujet de l'utilisation de php cURL, mais je suis au stade où je pense que le viewstate est le problème ...
Grâce, Marque.
OriginalL'auteur Mark Jones | 2010-07-16
Vous devez vous connecter pour publier un commentaire.
Ce qui semble être un réel problème lorsque vous essayez de gratter l'asp.net pages.
Les pages contiennent un champ caché nommé "__VIEWSTATE", qui contient un encodées en base64 jeu de va;ues contenant certains ou l'ensemble de l'état de la page lorsque la page a été envoyé. Il contient aussi le SHA1 de l'état d'affichage.
Ce que cela signifie, c'est que votre post doit contenir tout ce qui est dans le _VIEWSTATE ou il échouera.
J'ai été en mesure de publier une simple page de connexion qui n'en a que 2 champs, mais pas de plus en plus complexes de la page dans laquelle l'auteur a choisi de mettre l'ensemble de l'état de la page dans le viewstate.
Que je n'ai pas encore été en mesure de venir avec une solution.
OriginalL'auteur Ed Robinson
Changement:
:
Vous devez également configurer un fichier de cookie, jetez un oeil à CURLOPT_COOKIEFILE
CURLOPT_COOKIEFILE
:Le nom du fichier contenant les données de cookie. Le cookie fichier peut être au format Netscape, ou tout simplement HTTP-style-têtes déversés dans un fichier.
CURLOPT_COOKIE
:Le contenu de la "Cookie:" en-tête pour être utilisé dans la requête HTTP. Veuillez noter que plusieurs cookies sont séparés par un point-virgule suivi d'un espace (par exemple, "fruit=pomme; couleur=rouge")
CURLOPT_COOKIEJAR
:il le nom d'un fichier pour enregistrer tous les cookies à la fermeture de la connexion.
@voir http://www.php.net/manual/en/function.curl-setopt.php
OriginalL'auteur RobertPitt
Ne pas s'attendre à ce qu'il fonctionne sans codage de l' __VIEWSTATE chaîne de caractères en php à l'aide de
rawurlencode($viewstate);
OriginalL'auteur Thanasis