J'effectue une demande de courbure à une page. J'ai défini à la fois "curlopt_timeout" (à 6 secondes) et "curlopt_connectTimeout" (à 4 secondes) - et les deux fonctionnent parfaitement pour la plupart des URL. P>
Toutefois, quand une page Web ne répond pas (et provoque enfin une courrière à travers une erreur "Impossible de résoudre l'hôte" (err_no 6)) - il semble que "curlopt_timeout" n'a aucun effet et que curl attendra, éventuellement indéfiniment ou jusqu'à ce que un délai d'attente «autre» expire. P>
Avec l'URL, j'essaie d'accéder, Curl semble toujours prendre à peu près 15 secondes avant de retourner (ce qui n'a rien à voir avec le "curlopt_timeout" ou "curlopt_connectTimeout". P>
Quelqu'un peut-il me dire comment je peux limiter la durée d'une courbure qu'une boucle dépense tenter de résoudre un hôte? P>
3 Réponses :
Eh bien, vous avez 3 fois sur vos mains là-bas. P>
CURL dans PHP n'a pas de méthode par défaut pour définir ce délai d'attente, je suggérerais de résoudre le nom d'hôte à l'aide d'une autre méthode avec un délai d'attente, puis en passant l'adresse IP à curl. P>
Fantastique! Je verrai comment cela peut être fait de l'essai, merci!
Cela ne sera pas particulièrement facile, car DNS est une affaire synchrone en règle générale, qui bloque le processus. Il y a des «adns» ( chiark.greenend.org.uk/~ian/adns ) - qui fournit des recherches asynchrones, c'est vieux mais fonctionnel. Probablement assez facile d'appeler Crig ou Nslookup à l'extérieur et tuer le processus s'il faut trop de temps, mais cela introduit les frais généraux. Si vous pouvez utiliser pcntl_fork (), vous pouvez commencer un nouveau fil à le faire ou utiliser pcntl_alarm () pour sortir du verrouillage tôt.
En fait, Curlopt_ConnectTimeout inclut le temps de requête DNS. Testé dans PHP 5.4.9. P>
En fait, je l'ai défini à 10 secondes et je résolvez le délai d'attente après 2,5 secondes. Testé dans PHP 7.2
Changer DNS résolvez le délai d'attente avant d'utiliser CURL
putenv('RES_OPTIONS=retrans:1 retry:1 timeout:1 attempts:1');
Testé: n'a aucun effet sur php 7.3