Je suis presque sûr à 100% que j'ai prêt chaque poste sur Internet qui contient les mots-clés asp login curl php .ASPXAUTH, mais j'ai été incapable de trouver une solution. Je suis plus d'un hacker de code que le développeur élégant cependant, donc j'espère que quelqu'un peut m'aider s'il vous plaît.Impossible d'obtenir la valeur cookie .ASPXAUTH pour la connexion avec PHP cURL
J'ai un script curl qui se connecte à deux autres sites Web pour soumettre des formulaires de derrière la connexion avec succès. Cependant, j'ai récemment essayé d'utiliser une variante de ce script pour un troisième site Web. Cela fonctionne aussi loin que renvoyer la première page après la connexion, mais ensuite il traite tous les autres appels cURL comme si je ne me suis pas connecté. J'ai découvert (bien je pense) que cela a à voir avec le cookie .ASPXAUTH n'étant pas défini. J'ai une configuration cookie et cookiejar dans mon code cURL et il attrape le .ASP.NET_SessionID avec succès, mais pas le cookie .ASPXAUTH.
J'ai remarqué que je peux voir la valeur de cookie .ASPXAUTH dans les en-têtes lorsque je regarde "En-têtes HTTP en direct" mais je ne peux pas obtenir mon script cURL pour retourner l'en-tête avec ce cookie. Il semble que le cookie est réglé sur un 302 après la connexion et cURL ne gère pas correctement. J'ai donc désactivé CURLOPT_FOLLOWLOCATION et essayait de gérer la redirection moi-même mais je n'arrive toujours pas à le faire correctement (le serveur retourne une URL de redirection vraiment étrange et je ne pense pas que je fais cette partie)
Mais Je serais très reconnaissant si quelqu'un pouvait me aider ... s'il vous plaît
Voici mon code:
//setup Curl
$cookiename = substr($from,4,5);
$cookiefile = $cookiename . ".txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; MSIE 6.0; U; Windows NT 5.1)");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
//read login page
curl_setopt($ch, CURLOPT_URL, "Login.aspx");
$result = curl_exec ($ch);
echo $result;
// extract values for hidden form fields __REQUESTDIGEST __VIEWSTATE __EVENTVALIDATION fields
//extract __REQUESTDIGEST
$start = strpos($result,"id=\"__REQUESTDIGEST\" value=\"") + 28;
$end = $start + 157;
$rdigest = substr($result , $start , $end - $start);
//extract __VIEWSTATE
$start = strpos($result,"id=\"__VIEWSTATE\" value=\"") + 24;
$end = $start + 16300;
$vstate = substr($result , $start , $end - $start);
$vstate = urlencode($vstate);
//extract __EVENTVALIDATION
$start = strpos($result,"id=\"__EVENTVALIDATION\" value=\"") + 30;
$end = $start + 120;
$event = substr($result , $start , $end - $start);
$event = urlencode($event);
//set login form values and login
//curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_REFERER, 'Login.aspx');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '__REQUESTDIGEST=' . $rdigest . '&__VIEWSTATE=' . $vstate . '&__EVENTVALIDATION=' . $event . '&UserName=' . $from . '&Password=' . $password);
$result = curl_exec ($ch);
echo $result;
//extract __redirect
$start = strpos($result,"Location:") + 10;
$end = strpos($result,".aspx") +5;
$redirect = substr($result , $start , $end - $start);
$redirect = "https://www.domain.com/" . $redirect;
echo $redirect ."<br /><br />";
echo $result;
curl_setopt($ch, CURLOPT_URL, $redirect);
$result = curl_exec ($ch);
echo $result;
Et est ici la sortie:
//Login page headers
HTTP/1.1 200 OK Date: Tue, 30 Nov 2010 12:57:09 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Cache-Control: no-cache Pragma: no-cache Expires: -1 Content-Type: text/html; charset=utf-8 Content-Length: 81835
//Login page body
Submit login page headers
HTTP/1.1 100 Continue HTTP/1.1 302 Found Date: Tue, 30 Nov 2010 13:40:30 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Location: /(F(RZPDiDBb9OPbTuBnj2RAgH8KglRdj4B4u8trRMpa6QbBjff4evKMtHnOFNyX046Xdr33PZA3-6dHoZjxQpeZ7aNTevF75gArtpeScCjE9fI1))/default.aspx Set-Cookie: ASP.NET_SessionId=bhugr045cyybck45xvhpeb55; path=/; HttpOnly Cache-Control: no-cache Pragma: no-cache Expires: -1 Content-Type: text/html; charset=utf-8 Content-Length: 82196
//Redirect page body
//The login page body is displayed again
//More headers
HTTP/1.1 100 Continue HTTP/1.1 500 Internal Server Error Date: Tue, 30 Nov 2010 13:29:05 GMT Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Version: 2.0.50727 Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Length: 3026
//Error message from server
Server Error in '/' Application.
Runtime Error
Description: An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.
J'ai le même problème, j'ai essayé ce que vous avez écrit ici, mais cela n'a pas aidé. Cela a fonctionné dans le passé. Ce qui est intéressant, ça marche encore avec wget. Avec wget, je reçois le cookie aspxauth. – Adrian
Avez-vous essayé avec quelques chaînes d'agent utilisateur différentes? Essayez d'utiliser la même chaîne d'agent utilisateur que votre navigateur actuel et pas nécessairement celle que j'ai listée ci-dessus - l'agent utilisateur dans l'exemple ci-dessus est assez ancien maintenant ... – richelectron