2 votes

PHP : utiliser la session cURL connectée dans un navigateur normal

Bonsoir !

J'ai un script en PHP qui fait un appel CURL à une page de connexion d'un hôte distant. Après m'être connecté et avoir conservé la session via les options cookiejar et cookiefile, j'utilise le même gestionnaire de connexion CURL pour me connecter à la page suivante qui nécessite un téléchargement. Quand c'est fait, j'ai tous les paramètres de la session et je peux appeler n'importe quelle page du site, mais en CURL !

L'idée est que ce script qui utilise CURL, doit finalement être redirigé vers l'une de ces pages sur l'hôte distant en utilisant la session CURL, mais ce n'est pas possible, car à partir de curl vous ne pouvez pas montrer les résultats comme une page redirigée.

J'ai donc essayé de nombreuses options. Aucune ne fonctionne.

Schéma :

  • PHP script sur un serveur local.
  • Appel à domain.com/loggin.php (crée un ch curl)
  • Conserver la session curl sur le fichier cookie.txt.
  • Appel à domain.com/loggin_2.php avec le même ch (dernier non fermé).
  • Connexion complète sur le site distant.
  • Retour au script PHP script. Il faut rediriger vers domain.com/index.php, qui a besoin que les variables de session soient remplies avec le processus de connexion complet.

Que faire alors ?

1) Après s'être connecté, j'ai lu le fichier cookies.txt pour obtenir le PHPSESSID. Ensuite, j'ai essayé d'utiliser setcookie(), ou via header("Set-cookie : ...") et immédiatement après, en utilisant header("Location : domain.com/index.php").

Ne fonctionne pas.

2) J'ai essayé la même chose via un appel ajax et finalement document.cookie = ...

Ne fonctionne pas.

3) Ajout d'un troisième appel cURL à un fichier sur mon hôte distant qui imprime un $_SESSION JSONED. Je le récupère dans mon script, le décode et le charge dans ma session locale via foreach sur n'importe quelle valeur de tableau (foreach()...$_SESSION[$c] = $v). Ajout d'une session_start() avant ce foreach. Et immédiatement après, un header("Loaction : domain.com/index.php").

Ne fonctionne pas.

4) Ajout d'une session_write_close() avant l'en-tête ("Loaction : domain.com/index.php").

Ne fonctionne pas.

Je ne sais donc pas vraiment comment utiliser la session CURL.

J'ai essayé de corriger manuellement le PHPSESSID via le plugin Firefox Web Developer. Et j'ai noté l'identifiant de session généré par curl. Cela fonctionne parfaitement. Donc, il devrait être possible de le corriger via un script sur mon php script ! Mais je n'y arrive pas !

Aidez-moi, s'il vous plaît !

Gracias.

0voto

Luke3butler Points 86

Je me suis peut-être un peu égaré, mais je crois que j'ai compris. Vous pouvez utiliser CURLOPT_HEADER pour le débogage (contiendra les informations de la page redirigée) et CURLOPT_FOLLOWLOCATION de la manière suivante :

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://domain.com/login.php');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

J'utilise également

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

pour retourner une chaîne de caractères, ce qui est beaucoup plus utile pour le débogage ou l'analyse syntaxique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X