Pimp My Code
Give your code that special "pimp"
Curl et PHP, injecter des cookies perso
Categories: Developpement

Si vous avez déjà touché à Curl pour faire des petits bots, pour scraper des infos derrière une authentification, suivi une session, vous avez déjà du utiliser les cookies avec Curl.

En général, on fait des choses comme ça pour que Curl conserve les cookies dans un fichier et les resserve de page en page :

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, $myCookieFile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $myCookieFile);
$output = curl_exec($ch);
curl_close($ch);

Ca marche bien. Mais parfois, on peut avoir besoin d’injecter ses propres cookies.
Par exemple, on a déjà un id de session récupéré de son navigateur; ou on a encodé des paramètres dans une variable qu’on veut envoyer au serveur.
Ou encore, on récupère un cookie depuis un webbrowser headless, et on veut continuer avec curl.

Et bien c’est facile.

On construit notre chaine de cookie sous la forme suivante :
“key=value ; key2=value2;”
ex :

$cookie = “PHPSESSID=s3h0qmb9yBzvajand8vh5t9194; cookie_langue=fr”;

Ensuite, au lieu d’utiliser le fichier de cookies, on passe cette chaine à Curl via le paramètre CURLOPT_COOKIE :

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
//curl_setopt($ch, CURLOPT_COOKIEJAR, $myCookieFile);
//curl_setopt($ch, CURLOPT_COOKIEFILE, $myCookieFile);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
$output = curl_exec($ch);
curl_close($ch);

Si on veut récupérer les cookies mis à jour par le serveur, il faut demander à Curl de renvoyer aussi le header, et le filtrer pour mettre à jour notre chaine.

Tags:, ,

Leave a Reply