curlopt_verbose curlopt_userpwd curlopt_referer curlopt_httpheader curlopt_cookiesession curl_setopt php curl

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.