Bonjour,
Problème : Dans un script php, j'utilise cURL pour faire plusieurs requêtes (curl_exec) sur un service web et récupérer son résultat.
Cependant, au bout d'un certain nombre de requête (environ 3) le service web répond Fault: Connection Failed: All available connections are in use. Try again later, même lorsque j'impose quelques secondes d'attente entre chaque (avec sleep) requête.
Cela vient bien de mon script php et non du service car : quand j'utilise ce service web à la main, il ne renvoie pas cette erreur même lorsque je demande plusieurs requêtes très vite.
Détails : La connection cURL utilisée est un singleton initialisée avec ces paramètres :
que je crois être les bons pour n'avoir qu'une seule connexion au service web (comme quand je l'utilise "à la main").
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 self::$ch = curl_init(Params::$sms_test_url); // ... curl_setopt(self::$ch, CURLOPT_FORBID_REUSE, FALSE); curl_setopt(self::$ch, CURLOPT_FRESH_CONNECT, FALSE); curl_setopt(self::$ch, CURLOPT_TIMEOUT, 600); curl_setopt(self::$ch, CURLOPT_HTTPHEADER, array( 'Connection: Keep-Alive', 'Keep-Alive: 300' )); curl_setopt(self::$ch, CURLOPT_MAXCONNECTS, 1); curl_setopt(self::$ch, CURLOPT_CONNECTTIMEOUT, 600);
Résolution du problème (non satisfaisante) : je garde une connexion cURL unique et j'impose 3 minutes d'attentes toutes les deux requêtes (curl_exec). Là, il n'y a plus de Fault, les requêtes se font bien.
Je suspecte donc la commande curl_exec de faire plusieurs connexions plutôt qu'en utiliser une. Les 3 minutes d'attentes permettant de relâcher les deux connexions faites par les deux requêtes.
Demande : j'aimerais donc savoir d'où viennent les connexions multiples par curl et les empêcher (= imiter le comportement "à la main", où une connexion est utilisée et donc où les requêtes se font toutes bien).
Voilà, j'ai essayé d'être clair et de donner des détails, je remercie ceux qui voudront m'aider.
Partager