comment réutiliser correctement une poignée de boucle
Je veux réutiliser correctement une boucle de la poignée, de sorte qu'il ne me donne pas d'erreurs et de fonctionner normalement.
Supposons que j'ai ce bout de code:
CURL *curl;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0...");
curl_easy_setopt(curl, CURLOPT_URL, "http://www.google.com");
curl_easy_perform(curl);
curl_easy_setopt(curl, CURLOPT_URL, "http://www.bbc.com");
curl_easy_perform(curl);
curl_easy_cleanup(curl);
curl_global_cleanup();
Serait-ce une bonne ou d'une façon correcte de la réutilisation d'une poignée curl? Ou dois-je utiliser curl_easy_reset()
sur la poignée?
J'apprécierais aussi si quelqu'un a suggéré que vous devriez éviter de le faire en boucle. Peut-être que quelqu'un pourrait me donner un lien vers une source d'information?
source d'informationauteur user1494517
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez l'environnement de libcurl sur la simplicité de son interface, vous devez d'abord appeler :
curl_easy_init()
qui initialisation de la poignée facile,curl_global_init()
la plupart des cas, l'option d'indicateur doit êtreCURL_GLOBAL_ALL
Chacune de ces deux fonctions est appelée une seule fois au début et à la nécessité, au contraire, nettoyer :
curl_easy_cleanup()
lorsque vous avez fini de poignées que vous avez déclarer,curl_global_cleanup()
lorsque vous avez terminé avec libcurl,Pour de meilleurs résultats, vérifiez les erreurs autant que vous le pouvez. Libcurl fournit
curl_easy_strerror()
de la fonction pour cela. Elle renvoie une chaîne de caractères décrivant le CURLcode erreur. En outre, certaines fonctions renvoient la valeurCURL_OK ou un entier si tout est OK.
Par exemple, voici la bonne façon d'utiliser CURLOPT_URL option :
Si vous souhaitez réutiliser cette poignée pour un tout autre but, vous feriez mieux d'utiliser différents CURL
facile poignées.
Encore votre code devrait fonctionner très bien, mais je voudrais utiliser différentes poignées car il est évidemment séparer les deux opérations.
Cependant, parfois, vous aurez besoin de travailler avec la même poignée et si vous ne voulez pas le faire réinitialiser automatiquement, utilisez la fonction appropriée :
Noter qu'il ne change pas de connexions en temps réel, l'ID de Session cache, le cache DNS, les biscuits et les actions de la poignée.
Je n'ai pas essayé, mais avec votre code, il devrait nous donner quelque chose comme ça :
Si vous avez un problème avec
Sleep
essayez de le remplacer parsleep
ou_sleep
ou remplacer 5000 par 5.Si je comprends correctement à la question que vous aimeriez savoir si vous pouvez faire un appel à
curl_easy_perform()
et ensuite seulement modifier l'url par le biais decurl_easy_setoption()
et puis faire un deuxième appel? Cela devrait fonctionner sans erreurs puisque la fonction ne change pas toutes les options définies précédemment pour la poignée. C'est un court exemple:La réponse est pas depuis
curl_easy_perform()
pas de réinitialiser toutes les options de votre code doit être fine et vous pouvez vous en tenir uniquement la modification de l'url commecurl_easy_setoption(curl, CURLOPT_URL, <newurl>);
.Vous réinitialisez il XOR propres (avant affectation de la valeur de retour de
curl_easy_init()
nouveau) - faire les deux n'est pas bon. Pour plus d'info, voir la documentation.