comment obtenir les cookies de php curl dans une variable
Donc un mec à une autre entreprise pensais que ce serait génial si au lieu d'utiliser soap ou xml-rpc ou de repos ou tout autre protocole de communication, il a juste intégré l'ensemble de son intervention en tant que témoins dans l'en-tête.
J'ai besoin de tirer sur ces cookies comme on l'espère un tableau à partir de ce roulage de réponse. Si je dois perdre un tas de ma vie à écrire un analyseur syntaxique pour cela, je vais être très malheureux.
Personne ne sait comment cela peut être fait, de préférence sans avoir à écrire quelque chose dans un fichier?
Je serai très reconnaissant si quelqu'un peut m'aider avec cela.
Vous devez vous connecter pour publier un commentaire.
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'callback_SaveHeaders');
parse_str($m[1], $cookies)
, qui va farcir les biscuits dans un tableau associatif dans le$cookies
variable....preg_match_all('/(?<=Set-Cookie: ).[a-zA-Z0-9_=]+/', $curl_header, $matches)
preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $result, $matches); $cookies = array(); foreach($matches[1] as $item) { parse_str($item, $cookie); $cookies = array_merge($cookies, $cookie); }
preg_match_all('/^Set-Cookie:\s*([^;\r\n]*)/mi', $header, $matches);
Grâce à stackoverflow.com/a/35438727/594602Bien que cette question est assez vieux, et que la réponse est valide, je trouve ça un peu inconfortable parce que le contenu de la réponse HTTP (HTML, XML, JSON, binaire ou quoi que ce soit) se mélange avec les en-têtes.
J'ai trouvé une autre alternative. CURL fournit une option (
CURLOPT_HEADERFUNCTION
) pour définir une fonction de callback qui sera appelée pour chaque en-tête de réponse de la ligne. La fonction recevra la boucle de l'objet et une chaîne avec la ligne d'en-tête.Vous pouvez utiliser un code comme celui-ci (adapté de TML réponse):
Cette solution a l'inconvénient de l'utilisation d'une variable globale, mais je suppose que ce n'est pas un problème à court scripts. Et vous pouvez toujours utiliser des méthodes et des attributs si curl est enveloppé dans une classe.
$cookies
.$curlResponseHeaderCallback = function ($ch, $headerLine) use (&$cookies) {
puiscurl_setopt($ch, CURLOPT_HEADERFUNCTION, $curlResponseHeaderCallback);
.Ce qui le fait sans les expressions régulières, mais nécessite l' Extension PECL HTTP.
pecl install
effectivement travaillées. Grrr.Si vous utilisez CURLOPT_COOKIE_FILE et CURLOPT_COOKIE_JAR curl lire/écrire les cookies à partir de/vers un fichier. Vous pouvez, après le roulage est fait avec elle, lire et/ou le modifier comme vous le souhaitez.
libcurl fournit également CURLOPT_COOKIELIST qui extrait tous connu des cookies. Tous vous avez besoin est de s'assurer que le PHP/CURL liaison peut l'utiliser.
quelqu'un ici peut être utile. hhb_curl_exec2 fonctionne à peu près comme curl_exec, mais arg3 est un tableau qui sera remplie avec le retour des en-têtes http (index numérique), et arg4 est un tableau qui sera remplie avec le retour des cookies ($cookies["date d'expiration"]=>"Fri, 06-Mai-2016 05:58:51 GMT"), et arg5 sera remplie avec les... infos à propos de la demande brute faite par curl.
l'inconvénient est qu'il nécessite CURLOPT_RETURNTRANSFER pour être sur, sinon l'erreur, et qu'il remplacera CURLOPT_STDERR et CURLOPT_VERBOSE, si vous étiez déjà de les utiliser pour autre chose.. (j'ai peut changer cela plus tard)
exemple de comment l'utiliser:
et la fonction elle-même..
Accepté la réponse me semble qu'il recherche à travers l'ensemble du message de réponse. Cela pourrait vous donner de fausses correspondances pour les en-têtes de cookie si le mot "Set-Cookie" est au début d'une ligne. Alors que ce devrait être suffisant dans la plupart des cas. La manière la plus sécuritaire à la lire à travers le message du début jusqu'à la première ligne vide qui indique la fin des en-têtes de message. C'est juste une autre solution que pour la première ligne vide, puis utiliser preg_grep sur ces lignes, seulement pour trouver des "Set-Cookie".
Ma compréhension est que les cookies de
curl
doit être écrit dans un fichier (curl -c cookie_file
). Si vous êtes en cours d'exécutioncurl
par le biais de PHPexec
ousystem
fonctions (ou quoi que ce soit dans la famille), vous devez être en mesure d'enregistrer les cookies dans un fichier, puis ouvrez le fichier et de les lire dans.