Position actuelle: Accueil> Derniers articles> curl_share_setopt () utilisé en conjonction avec curlshopt_share, curlshopt_unshare explication détaillée

curl_share_setopt () utilisé en conjonction avec curlshopt_share, curlshopt_unshare explication détaillée

M66 2025-06-03

Lorsque vous utilisez la bibliothèque Curl de PHP pour les demandes de réseau, nous créons généralement une poignée Curl séparée ( curl_init () ) pour fonctionner. Cependant, Curl_share_Init () et Curl_share_setopt () sont utiles lorsque nous devons partager certaines données entre plusieurs poignées Curl (telles que les cookies, les caches DNS ou les séances SSL, etc.).

Cet article analysera en détail comment utiliser ces fonctions et comment implémenter le partage des ressources et l'annuler les mécanismes de partage via Curlshopt_share et Curlshopt_unshare .

1. Concepts de base

Dans Curl, chaque poignée Curl est indépendante par défaut. Si vous avez besoin de plusieurs poignées, partagez certaines données internes (telles que le cache de résolution DNS, les données de cookie ou le cache de session SSL), vous pouvez utiliser la "poignée de partage".

PHP fournit les fonctions connexes suivantes:

  • curl_share_init () : initialisez une poignée partagée.

  • curl_share_setopt () : définissez des options de partage pour les poignées partagées.

  • curl_share_close () : fermez la poignée partagée.

Options correspondantes:

  • Curlshopt_share : spécifie le type de ressource à partager.

  • Curlshopt_unshare : spécifie le type de ressource à non partagé.

2. Exemple de code: cookies partagés

Supposons que nous ayons deux demandes de Curl différentes et que nous voulons qu'elles partagent les mêmes données de cookies. De cette façon, le cookie set pour la première demande et la deuxième demande peut être utilisée automatiquement.

 <?php
// Initialiser la poignée partagée
$sh = curl_share_init();

// Configurer du contenu partagé,Nous partageons ici Cookie
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);

// Initialiser le premier cURL Poignée
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://m66.net/page1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_SHARE, $sh);
$response1 = curl_exec($ch1);
curl_close($ch1);

// Initialiser la seconde cURL Poignée
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://m66.net/page2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_SHARE, $sh);
$response2 = curl_exec($ch2);
curl_close($ch2);

// Annuler le partage Cookie
curl_share_setopt($sh, CURLSHOPT_UNSHARE, CURL_LOCK_DATA_COOKIE);

// 关闭共享Poignée
curl_share_close($sh);

// Résultat de sortie
echo "Response 1:\n$response1\n";
echo "Response 2:\n$response2\n";
?>

3. Analyser progressivement le code

1 ?? curl_share_init ()
Nous appelons d'abord curl_share_init () pour créer une poignée partagée $ sh , qui est spécifiquement utilisée pour gérer les données à partager.

2 ?? curl_share_setopt ($ sh, curlshopt_share, curl_lock_data_cookie)
Ici, nous spécifions les données de cookies partagées. Curl_lock_data_cookie représente les données de cookie, et les autres valeurs disponibles incluent:

  • Curl_lock_data_dns (cache dns)

  • Curl_lock_data_ssl_session (session SSL)

Vous pouvez appeler Curl_share_Setopt () plusieurs fois pour partager une variété de données.

3 ?? Curlopt_share
Chaque poignée Curl ( $ ch1 , $ ch2 ) doit être liée à la poignée partagée $ sh via curlopt_share afin qu'ils puissent partager les données spécifiées.

4 ?? curl_share_setopt ($ sh, curlshopt_unshare, curl_lock_data_cookie)
Lorsque le partage d'une certaine données n'est plus nécessaire, vous pouvez spécifier que vous annulez le partage avec Curlshopt_unshare . Remarque: Le non-décalé annule uniquement le partage de ce type de données, mais la poignée partagée peut toujours être utilisée.

5 ?? curl_share_close ($ sh)
Enfin, relâchez la ressource de poignée partagée. Notez que cette étape est nécessaire, sinon elle peut entraîner des fuites de mémoire.

4. Choses à noter

  • Les poignées partagées ne sont valables que dans le même processus.

  • Tous les types de données ne conviennent pas au partage, et des scénarios spécifiques sont nécessaires lors de leur application dans des applications réelles.

  • Utilisez des poignées partagées dans des environnements multi-thread pour assurer la sécurité des filetages.