CURL Multirequetes avec limitation

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : CURL Multirequetes avec limitation

Re: CURL Multirequetes avec limitation

par Calimero » 03 nov. 2009, 15:58

PHP est un langage synchrone non-multithreadé, ce qui signifie que tu ne peux pas paralléliser du code dans un même script. Si tu veux plusieurs requêtes CURL simultanées, il te faut multiplier les processus. Il faudrait donc que chaque requête CURL se lance dans un process (une instance de PHP) indépendant.

Si tu es sous linux (et que ton script n'aura pas vocation à être lancé sur un système windows), regarde du côté de pcntl_fork() : http://fr.php.net/pcntl_fork .

CURL Multirequetes avec limitation

par energie13 » 03 nov. 2009, 10:02

Bonjour
Je voulais savoir si vous auriez une piste pour effectuer plusieurs requetes simultanées avec CURL mais en limitant les requetes simultanées par une variable X afin de ne pas surcharger le serveur.

Je fournis une liste de test a effectuer. Pour chaque test, le script doit se connecter a plusieurs pages en curl et extraire certains contenus via des pregmatch afin de les stocker dans un tableau. Tout fonctionne cependant c'est assez long. J'aimerai savoir si qqn pouvait me donner une piste sur les requetes simultanées, j'ai trouvé qqes pistes sur le net mais c'est assez flou pour moi :( je suis un peu perdu et je ne sais pas non plus comment limiter le nombre de requete simultanées.

Code : Tout sélectionner

echo $tableauHeader; #---------------------------------------------------- # Boucle de test pour $nb for($nb = 0; $nb != $nombre_total; $nb++) { ////////////////////////////////: $ch = curl_init($url1); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_POSTFIELDS, 'task='.$post_1.'&ok='.$donnees_recherche[$nb].'&mac_addr=&ip=&login'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_COOKIE, 'di='.$cookie); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $ret = curl_exec($ch); //traitement de la page et récupération des valeurs //print ($ret); #---------------------------------------------------- $ch = curl_init('$url2'); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_COOKIE, 'di='.$cookie); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $ret = curl_exec($ch); preg_match_all('#id="id" value="(.+)"#', $ret, $rep_1s); $rep = $rep_1s[1][0]; //traitement de la page et récupération des valeurs echo " <TR class=\"data\"> <TH>".$donnees_recherche[$nb]."</TH> <TH>".$statut1."</TH> <TH>".$chaineDec."</TH> <TH>".$numChaineDec."</TH> <TH>".$statut2."</TH> </TR> "; } echo $tableauFooter; // Balise de fin
Je vous remercie par avance.