curlopt_userpwd - PHP cURL: CURLOPT_CONNECTTIMEOUT vs CURLOPT_TIMEOUT
curlopt_verbose (4)
PHP tiene estas dos opciones relacionadas con el tiempo de espera: CURLOPT_CONNECTTIMEOUT
y CURLOPT_TIMEOUT
.
Las descripciones en el sitio de PHP son un poco vagas. ¿Cual es la diferencia?
Para usar un ejemplo del mundo real: diga que está enviando vars GET a una URL a través de cURL y desea recibir un XML de vuelta, CURLOPT_CONNECTTIMEOUT
relacionaría con la cantidad máxima de tiempo que puede llevar para conectarse al servidor y CURLOPT_TIMEOUT
la cantidad máxima de tiempo se puede tardar en devolver el XML?
CURLOPT_CONNECTTIMEOUT es la cantidad máxima de tiempo en segundos que se permite para realizar la conexión al servidor. Se puede establecer en 0 para deshabilitar este límite, pero esto no es aconsejable en un entorno de producción.
CURLOPT_TIMEOUT es una cantidad máxima de tiempo en segundos a la que se limitará la ejecución de las llamadas a la función de extensión de cURL individual. Tenga en cuenta que el valor para esta configuración debe incluir el valor para CURLOPT_CONNECTTIMEOUT.
En otras palabras, CURLOPT_CONNECTTIMEOUT es un segmento del tiempo representado por CURLOPT_TIMEOUT, por lo que el valor de CURLOPT_TIMEOUT debe ser mayor que el valor de CURLOPT_CONNECTTIMEOUT.
De la diferencia entre CURLOPT_CONNECTTIMEOUT y CURLOPT_TIMEOUT
Además de la respuesta aceptada .
De acuerdo con el código fuente, las configuraciones están conectadas: si ambas están establecidas, se usa la más restrictiva. Pero solo en la etapa de conexión.
/* if a timeout is set, use the most restrictive one */
if(data->set.timeout > 0)
timeout_set |= 1;
if(duringconnect && (data->set.connecttimeout > 0))
timeout_set |= 2;
switch(timeout_set) {
//...
case 3:
if(data->set.timeout < data->set.connecttimeout)
timeout_ms = data->set.timeout;
else
timeout_ms = data->set.connecttimeout;
break;
Pruebas unitarias para la fuente.
CURLOPT_CONNECTTIMEOUT no es un segmento del tiempo representado por CURLOPT_TIMEOUT
Si CURLOPT_CONNECTTIMEOUT se establece en 3 segundos y CURLOPT_TIMEOUT en 4 segundos, la ejecución puede demorar hasta 7 segundos.
Probé esto simulando la conexión lenta del servidor (caída de iptables).
CURLOPT_CONNECTTIMEOUT es el momento para conectarse únicamente al servidor.
CURLOPT_TIMEOUT es todo el tiempo para conectarse más el tiempo para intercambiar datos.
Entonces, CURLOPT_TIMEOUT incluye siempre CURLOPT_CONNECTTIMEOUT.
Para verificar que es muy fácil usar CURLINFO_CONNECT_TIME y CURLINFO_TOTAL_TIME.
curl_getinfo ($ ch, CURLINFO_CONNECT_TIME) obtiene la información y curl_setopt ($ ch, CURLOPT_CONNECTTIMEOUT, $ yourMaxConnTime) establece el valor máximo para conectar.
curl_getinfo ($ ch, CURLINFO_TOTAL_TIME) obtiene la información y curl_setopt ($ ch, CURLOPT_TIMEOUT, $ yourMaxTotTime) establece el valor máximo de toda la operación.
Por supuesto, $ yourMaxTotTime debe ser más alto que $ yourMaxConnTime siempre. Todos estos valores están en segundos.