PHP Utiliser des cookies


Exemple

cURL peut conserver les cookies reçus dans les réponses pour les utiliser avec les demandes suivantes. Pour la gestion simple des cookies de session en mémoire, ceci est réalisé avec une seule ligne de code:

curl_setopt($ch, CURLOPT_COOKIEFILE, "");

Si vous devez conserver les cookies après la destruction du descripteur cURL, vous pouvez spécifier le fichier dans lequel les stocker dans:

curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookies.txt");

Ensuite, lorsque vous souhaitez les utiliser à nouveau, transmettez-les en tant que fichier de cookie:

curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");

Rappelez-vous, cependant, que ces deux étapes ne sont pas nécessaires, sauf si vous devez transporter des cookies entre différentes poignées cURL. Pour la plupart des cas d'utilisation, il suffit de définir CURLOPT_COOKIEFILE sur la chaîne vide.


La gestion des cookies peut être utilisée, par exemple, pour extraire des ressources d'un site Web nécessitant une connexion. Il s'agit généralement d'une procédure en deux étapes. D'abord, POST à ​​la page de connexion.

<?php

# create a cURL handle
$ch  = curl_init();

# set the URL (this could also be passed to curl_init() if desired)
curl_setopt($ch, CURLOPT_URL, "https://www.example.com/login.php");

# set the HTTP method to POST
curl_setopt($ch, CURLOPT_POST, true);

# setting this option to an empty string enables cookie handling
# but does not load cookies from a file
curl_setopt($ch, CURLOPT_COOKIEFILE, "");

# set the values to be sent
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
    "username"=>"joe_bloggs",
    "password"=>"$up3r_$3cr3t",
));

# return the response body
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

# send the request
$result = curl_exec($ch);

La deuxième étape (après la vérification des erreurs standard) est généralement une simple requête GET. L'important est de réutiliser le handle cURL existant pour la deuxième requête. Cela garantit que les cookies de la première réponse seront automatiquement inclus dans la deuxième demande.

# we are not calling curl_init()

# simply change the URL
curl_setopt($ch, CURLOPT_URL, "https://www.example.com/show_me_the_foo.php");

# change the method back to GET
curl_setopt($ch, CURLOPT_HTTPGET, true);

# send the request
$result = curl_exec($ch);

# finished with cURL
curl_close($ch);

# do stuff with $result...

Ceci est uniquement conçu comme un exemple de gestion des cookies. Dans la vraie vie, les choses sont généralement plus compliquées. Vous devez souvent effectuer un GET initial de la page de connexion pour extraire un jeton de connexion qui doit être inclus dans votre POST. D'autres sites peuvent bloquer le client cURL en fonction de sa chaîne User-Agent, ce qui vous oblige à le modifier.