Funciones cURL
PHP Manual

curl_setopt

(PHP 4 >= 4.0.2, PHP 5)

curl_setoptConfigura una opción para una transferencia cURL

Descripción

bool curl_setopt ( resource $ch , int $option , mixed $value )

Establece una opción en la sesión del recurso cURL.

Parámetros

ch

El recurso cURL devuelto por curl_init().

option

La opción CURLOPT_XXX a configurar.

value

Valor a configurar en la opción.

El valor de la opción debe ser un boleano para los siguientes parámetros:

Opción Establecer value a Notas
CURLOPT_AUTOREFERER TRUE para automáticamente establecer el valor del campo Referer: en peticiones que siguen una redireción Location:.
CURLOPT_BINARYTRANSFER TRUE para devolver el resultado en sin formato cuando CURLOPT_RETURNTRANSFER está activado.
CURLOPT_COOKIESESSION TRUE para usarse como una nueva cookie de "sesión". Forzará libcurl a ignorar todas las cookies, se trata de cargar estas "cookies de sesión" de la sesión anterior. Por defecto, libcurl siempre guarda y carga todas las cookies, independientemente si hay cookies de sesión o no. Las cookies de sesión son cookies sin fecha de caducidad y estan pensadas para mantenerse activas y solo existir para esta "sesión".
CURLOPT_CRLF TRUE para convertir nuevas líneas Unix a nuevas líneas CRLF en transferencias.
CURLOPT_DNS_USE_GLOBAL_CACHE TRUE para usar caché DNS global. Esta opción no es thread-safe y está activada por defecto.
CURLOPT_FAILONERROR TRUE para fallar silenciosamente si el código HTTP devuelto es mayor o igual que 400. El comportamiento por defecto es devolver la página normalmente, ignornado el código.
CURLOPT_FILETIME TRUE para intentar obtener la fecha de modificación del documento. Este valor puede obtenerse usando la opción CURLINFO_FILETIME con curl_getinfo().
CURLOPT_FOLLOWLOCATION TRUE para seguir cualquier encabezado "Location: " que el servidor envíe como parte del encabezado HTTP (observe la recursividad, PHP seguirá tantos header "Location: " como se envíen, a no ser que la opción CURLOPT_MAXREDIRS esté establecida).
CURLOPT_FORBID_REUSE TRUE para forzar a cerrar explicitamente la conexión cuando se finalice el proceso y no guardarla para su reuso.
CURLOPT_FRESH_CONNECT TRUE para forzar el uso de una nueva conexión en lugar de usar una en caché.
CURLOPT_FTP_USE_EPRT TRUE para usar EPRT (y LPRT) cuando se hacen descargas FTP activas. Use FALSE para desactivar EPRT y LPRT y usar PORT solamente.
CURLOPT_FTP_USE_EPSV TRUE para probar primero el comando EPSV para transferencias FTP antes de volver a PASV. Establezca la opción a FALSE para desactivar EPSV.
CURLOPT_FTPAPPEND TRUE para añadir al fichero remoto en lugar de sobreescribirlo.
CURLOPT_FTPASCII Un alias de CURLOPT_TRANSFERTEXT. Para usar en su lugar.
CURLOPT_FTPLISTONLY TRUE para solo listar los nombres de un directorio FTP directorio.
CURLOPT_HEADER TRUE para incluir el header en el output.
CURLINFO_HEADER_OUT TRUE para seguir la cadena de la petición del recurso. Disponible desde PHP 5.1.3. El prefijo CURLINFO_ es intencionado.
CURLOPT_HTTPGET TRUE para resetear la petición HTTP a GET. Puesto que GET es el método por defecto, solo es necesario si el método fue cambiado.
CURLOPT_HTTPPROXYTUNNEL TRUE para usar un tunel a través de un proxy HTTP.
CURLOPT_MUTE TRUE para completar silenciosamente en lo que se refiere a las funciones cURL.
CURLOPT_NETRC TRUE para escanear el fichero ~/.netrc y buscar un usuario y contraseña para establecer una conexión con el sitio remoto.
CURLOPT_NOBODY TRUE para excluir el body del output. El método de petición es establecido a HEAD. Si se cambia a FALSE no cambia el método a GET.
CURLOPT_NOPROGRESS

TRUE para desactivar medidor de progreso para transferencias cURL.

Note:

PHP automáticamente establece esta opción a TRUE, solo debería cambiarse para razones de testing.

CURLOPT_NOSIGNAL TRUE para ignorar cualquier función cURL que cause una señal a ser enviada al proceso PHP. Esta opción está activada por defecto en multi-hilo SAPI, entonces las opciones de timeout pueden ser usadas. Añadido en cURL 7.10.
CURLOPT_POST TRUE para hacer un HTTP POST normal. Este POST del tipo application/x-www-form-urlencoded, el más común en formularios HTML.
CURLOPT_PUT TRUE para hacer un HTTP PUT de un fichero. El fichero a subir debe establecerse en CURLOPT_INFILE y CURLOPT_INFILESIZE.
CURLOPT_RETURNTRANSFER TRUE para devolver el resultado de la transferencia como string del valor de curl_exec() en lugar de mostrarlo directamente.
CURLOPT_SSL_VERIFYPEER FALSE para que cURL no verifique el peer del certificado. Para usar diferentes certificados para la verificación se pueden especificar con la opción CURLOPT_CAINFO o se puede especificar el directorio donde se encuentra el certificado con la opción CURLOPT_CAPATH. Seguramente también necesitará que CURLOPT_SSL_VERIFYHOST sea TRUE o FALSE si CURLOPT_SSL_VERIFYPEER está desactivado (por defecto es 2). TRUE por defecto desde cURL 7.10.
CURLOPT_TRANSFERTEXT TRUE para usar modo ASCII para transferencias FTP. En LDAP, obtiene los datos en texto plano en lugar de HTML. En sistemas Windows, no estabecerá STDOUT en modo binario.
CURLOPT_UNRESTRICTED_AUTH TRUE para prevenir el envio de usuario y contraseña cuando se siguen locations (usando CURLOPT_FOLLOWLOCATION), incluso cuando el hostname es diferente.
CURLOPT_UPLOAD TRUE preparar cURL para subir un fichero.
CURLOPT_VERBOSE TRUE para mostrar información verbose. Escribe la salida en STDERR, o el fichero especificado usando CURLOPT_STDERR.

El valor de la opción debe ser un entero para los siguientes parámetros:

Opción Establecer value a Notas
CURLOPT_BUFFERSIZE Tamaño del búfer a usar por cada lectura. De todas formas, no hay ninguna garantía de que la petición usará todo el búfer. Añadido en cURL 7.10.
CURLOPT_CLOSEPOLICY Tanto CURLCLOSEPOLICY_LEAST_RECENTLY_USED como CURLCLOSEPOLICY_OLDEST. Hay otras tres constantes CURLCLOSEPOLICY_, pero cURL no lo soporta todavía.
CURLOPT_CONNECTTIMEOUT Número de segundos a esperar cuando se está intentado conectar. Use 0 para esperar indefinidamente.
CURLOPT_CONNECTTIMEOUT_MS Número de milisegundos a esperar cuando se está intentado conectar. Use 0 para esperar indefinidamente. Añadido en cURL 7.16.2. Disponible desde PHP 5.2.3.
CURLOPT_DNS_CACHE_TIMEOUT Número de segundos a mantener las entradas DNS en memoria. Esta opción está establecida a 120 (2 minutos) por defecto.
CURLOPT_FTPSSLAUTH Método de autenticación FTP (cuando está activado): CURLFTPAUTH_SSL (prueba SSL primero), CURLFTPAUTH_TLS (prueba TLS primero), o CURLFTPAUTH_DEFAULT (hacer que cURL decida). Añadido en cURL 7.12.2.
CURLOPT_HTTP_VERSION CURL_HTTP_VERSION_NONE (por defecto, hacer que CURL decida que versión a usar), CURL_HTTP_VERSION_1_0 (fuerza HTTP/1.0), or CURL_HTTP_VERSION_1_1 (fuerza HTTP/1.1).
CURLOPT_HTTPAUTH

Los métodos de autenticación HTTP. Las opciones son: CURLAUTH_BASIC, CURLAUTH_DIGEST, CURLAUTH_GSSNEGOTIATE, CURLAUTH_NTLM, CURLAUTH_ANY, y CURLAUTH_ANYSAFE.

El separador | o operador puede ser usado para combinar más de un método. Si se utiliza, cURL comprobará en el servidor remoto que métodos soporta y utilizará el más adecuado.

CURLAUTH_ANY es un alias para CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLAUTH_ANYSAFE es un alias para CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM.

CURLOPT_INFILESIZE El tamaño esperado en bytes, del fichero cuando se está subiendo un fichero al sitio remoto.
CURLOPT_LOW_SPEED_LIMIT La velocidad de transferencia, en bytes por segundo, que la transferencia debería estar por debajo durante CURLOPT_LOW_SPEED_TIME segundos para PHP a considerar que la transferencia es demasiado lenta y debe abortarse.
CURLOPT_LOW_SPEED_TIME Número en segundos en que la velocidad de transferencia debería estar debajo de CURLOPT_LOW_SPEED_LIMIT antes que PHP considere que la transferencia es demasiado lenta y debe abortarse.
CURLOPT_MAXCONNECTS Número máximo de conexiones persistentes que están permitidas. Cuando se llega al límite, se utiliza CURLOPT_CLOSEPOLICY para determinar que conexión debe cerrarse.
CURLOPT_MAXREDIRS Número máximo de redirecciones HTTP a seguir. Use esta opción con CURLOPT_FOLLOWLOCATION.
CURLOPT_PORT Puerto alternativo a conectarse.
CURLOPT_PROTOCOLS

Máscara de los valores CURLPROTO_*. Si se utiliza, esta máscara limitará que protocolos utilizará libcurl en transferencias. Permite que libcurl utilice cualquiera de los protocolos pero limita que grupo de protocolos a usar en específicas transferencias. Por defecto libcurl acepta todos los protocolos. Vea también: CURLOPT_REDIR_PROTOCOLS.

Las opciones para válidos procolos son: CURLPROTO_HTTP, CURLPROTO_HTTPS, CURLPROTO_FTP, CURLPROTO_FTPS, CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_TELNET, CURLPROTO_LDAP, CURLPROTO_LDAPS, CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_TFTP, CURLPROTO_ALL

Añadido en cURL 7.19.4.
CURLOPT_PROXYAUTH Método de autenticación HTTP para usar conexiones vía proxy. Usa el mismo tipo de máscaras descritas en CURLOPT_HTTPAUTH. Para autenticación proxy, solamente CURLAUTH_BASIC y CURLAUTH_NTLM están actualmente soportadas. Añadido en cURL 7.10.7.
CURLOPT_PROXYPORT Número del puerto para usar en la conexión proxy. Este puerto también puede configurase en CURLOPT_PROXY.
CURLOPT_PROXYTYPE Puede ser CURLPROXY_HTTP (por defecto) o bien CURLPROXY_SOCKS5. Añadido en cURL 7.10.
CURLOPT_REDIR_PROTOCOLS Máscara de valores CURLPROTO_*. Si se usa, esta máscara limitará que protocolos usará libcurl en una transferencia que sigue una redireción cuando CURLOPT_FOLLOWLOCATION está activado. Esto permite limitar a específicas transferencias que grupo de protocolos utilizar en redireciones. Por defecto libcurl aceptará todos los protocolos excepto FILE y SCP. Esto es nuevo si se compara con versiones anteriores a 7.19.4 donde se seguían incodicionalmente todos los protocolos soportados. Vea también CURLOPT_PROTOCOLS para los valores de las constantes. Añadido en cURL 7.19.4.
CURLOPT_RESUME_FROM El punto, en bytes desde donde continuar una transferencia.
CURLOPT_SSL_VERIFYHOST 1 para comprobar que existe un nombre común en el peer del certificado SSL. 2 para comprobar que existe un nombre común y también para verificar que el hostname coinicide con el proporcionado.
CURLOPT_SSLVERSION Versión SSL a usar (2 o 3). Por defecto PHP intentará determinarlo por si mismo, de todos modos en algunos casos debe asignarse manualmente.
CURLOPT_TIMECONDITION Como se trata CURLOPT_TIMEVALUE. Utilice CURL_TIMECOND_IFMODSINCE para devolver la página solamente si fue modificada desde el tiempo especificado en CURLOPT_TIMEVALUE. Si no fué modificada, se devolverá "304 Not Modified" en el header asumiendo que CURLOPT_HEADER es TRUE. Utilice CURL_TIMECOND_IFUNMODSINCE para el efecto contrario. CURL_TIMECOND_IFMODSINCE está activado por defecto.
CURLOPT_TIMEOUT Número máximo de segundos permitido para ejectuar funciones cURL.
CURLOPT_TIMEOUT_MS Número máximo en milisegundos permitido para ejecutar funciones cURL. Añadido en cURL 7.16.2. Disponible desde PHP 5.2.3.
CURLOPT_TIMEVALUE Tiempo en segundos desde el 1 de enero de 1970. El tiempo será usado por CURLOPT_TIMECONDITION. Por defecto, se utiliza CURL_TIMECOND_IFMODSINCE.

El valor de la opción debe ser una cadena para los siguientes parámetros:

Opción Configurar valor a Notas
CURLOPT_CAINFO Nombre del fichero que contiene uno o más certificados para verificar el peer. Solo tiene sentido cuando se utiliza en combinación de CURLOPT_SSL_VERIFYPEER.
CURLOPT_CAPATH Directorio que contiene múltiple certificados CA. Utilice esta opción junto con CURLOPT_SSL_VERIFYPEER.
CURLOPT_COOKIE Contenido de "Cookie: " del header para ser usado en la petición HTTP. Observe que múltiples cookies van separadas con punto y coma seguidas por un espacio (ej., "fruit=apple; colour=red")
CURLOPT_COOKIEFILE Nombre del fichero que contiene datos de las cookies. El fichero de cookies puede estar en formato Netscape, o simplemente tipo HTTP plano dentro de un fichero.
CURLOPT_COOKIEJAR Nombre del fichero donde guardar cookies internas cuando se cierra se cierra, por e.j. después de llamar a curl_close.
CURLOPT_CUSTOMREQUEST

Método de petición personalizado a usar en lugar de "GET" o "HEAD" cuando se realiza una petición HTTP. Es útil para hacer "DELETE" o otros tipos de peticiones HTTP menos comunes. "GET", "POST", "CONNECT" y otros, son valores válidos. Ej. No introduzca toda la petición HTTP aquí, seria incorrecto introducir: "GET /index.html HTTP/1.0\r\n\r\n".

Note:

No cambie este valor sin antes asegurarse que el servidor soporta el método de petición personalizado.

CURLOPT_EGDSOCKET Es como CURLOPT_RANDOM_FILE, con excepción que en lugar de un fichero se utiliza un Entropy Gathering Daemon socket.
CURLOPT_ENCODING Contenido del valor "Accept-Encoding: " en el header. Esto permite decodificar la respuesta. Los formatos de codificación disponibles son "identity", "deflate", y "gzip". Si el valor se envía vacío, "", se enviarán todos los tipos de condificación soportados. Añadido en cURL 7.10.
CURLOPT_FTPPORT El valor que será usando para obtener la dirección IP a usar para la instrucción FTP "POST". La instrucción "POST" dice al servidor remoto a que dirección IP se debe conectar. La cadena puede ser una dirección IP, el nombre de un servidor o un interfaz de red (bajo Unix), o simplemente '-' para usar la dirección IP por defecto del sistema.
CURLOPT_INTERFACE Nombre del interfaz de salida a usar. Puede ser el nombre del interfaz, una dirección IP o el nombre de un servidor.
CURLOPT_KRB4LEVEL Nivel de seguridad KRB4 (Kerberos 4). Cualquiera de los siguientes valores (en orden de menos a más potentes) son válidos: "clear", "safe", "confidential", "private".. Si la cadena no coincide con alguno de estos valores, será usado "private". Configure esta opción a NULL para desactivar seguridad KRB4. Actualmente la seguridad KRB4 solo funciona con transaciones FTP.
CURLOPT_POSTFIELDS Todos los datos para enviar vía HTTP "POST". para enviar un fichero, prefija el nombre del fichero con @ y utiliza la ruta completa. Se puede enviar una cadena urlencoded como 'para1=val1&para2=val2&...' o también como un array con el nombre del campo como key y los datos como value. Si el value es un array, el header Content-Type será establecido a multipart/form-data.
CURLOPT_PROXY El proxy HTTP para enviar peticiones a través de tunel.
CURLOPT_PROXYUSERPWD Usuario y contraseña con el siguiente formato "[usuario]:[contraseña]" para usarse en la conexión al proxy.
CURLOPT_RANDOM_FILE Nombre del fichero a ser usado para generar números aleatorios para el SSL.
CURLOPT_RANGE Rango(s) de datos para obtener en el formato "X-Y" donde X y Y son opcionales. Transferencias HTTP también soportan varios intérvalos, separados por comas en el formato "X-Y,N-M".
CURLOPT_REFERER Contenido del Header "Referer: " para ser usado en la petición HTTP.
CURLOPT_SSL_CIPHER_LIST Lista de ciphers a ser usados por SSL. Por ejemplo, RC4-SHA y TLSv1 es una lista válida de ciphers.
CURLOPT_SSLCERT Nombre del fichero que contiene un certificado con formato PEM.
CURLOPT_SSLCERTPASSWD Contraseña requerida para usar el certificado CURLOPT_SSLCERT.
CURLOPT_SSLCERTTYPE Formato del certificado. Los formatos soportados son "PEM" (por defecto), "DER", y "ENG". Añadido en cURL 7.9.3.
CURLOPT_SSLENGINE El identificador para el crypto engine de la clave privada SSL especificada en CURLOPT_SSLKEY.
CURLOPT_SSLENGINE_DEFAULT Identificador para el crypto engine usado para operaciones crypto asimétricas.
CURLOPT_SSLKEY Nombre del fichero que contiene la clave privada SSL.
CURLOPT_SSLKEYPASSWD

Contraseña secreta requerida para usar la clave privada SSL especificada en CURLOPT_SSLKEY.

Note:

Como esta opción contiene una contraseña, recuerde mantener el PHP script en un sitio seguro.

CURLOPT_SSLKEYTYPE Tipo de llave privada SSL especificada en CURLOPT_SSLKEY. Los tipos de claves soportadas son "PEM" (default), "DER", y "ENG".
CURLOPT_URL Dirección URL a capturar. Este valor también puede ser configurado cuando se inicia una sesión con curl_init().
CURLOPT_USERAGENT Contenido del header "User-Agent: " a ser usado en la petición HTTP.
CURLOPT_USERPWD Nombre de usuario y contraseña siguiendo el formato "[username]:[password]" para ser usado en la conexión.

El valor de la opción debe ser un array para los siguientes parámetros:

Opción Configurar valor a Notas
CURLOPT_HTTP200ALIASES Array de respuestas HTTP 200 que serán tratadas como respuestas válidas y no como errores. Añadido en cURL 7.10.3.
CURLOPT_HTTPHEADER Un array de campos a configurar para el header HTTP, en el formato: array('Content-type: text/plain', 'Content-length: 100')
CURLOPT_POSTQUOTE Un array de comandos FTP a ejecutar en el servidor después de que se realice la petición FTP.
CURLOPT_QUOTE Un array de comandos FTP a ejecutar en el servidor antes de que se realice la petición FTP.

El valor de la opción debe ser un recurso stream (usando fopen(), por ejemplo) para los siguientes parámetros:

Opción Configurarvalor a Notas
CURLOPT_FILE El fichero que la transferencia guardará el resultado. Por defecto es STDOUT (la ventana del navegador).
CURLOPT_INFILE El fichero a subir en la transferencia.
CURLOPT_STDERR Localización alternativa para mostrar los errores en lugar de STDERR.
CURLOPT_WRITEHEADER El fichero donde guardar la parte del header durante la transferencia.

El valor de la opción debe ser un string válido para la llamada a una función de retorno para los siguientes parámetros:

Opción Configurarvalor a Notas
CURLOPT_HEADERFUNCTION Nombre de la función de llamada de retorno donde la función toma dos parámetros. El primero es el recurso cURL, el sengudo es una cadena con los datos del header a ser escritos. Los datos del header deben ser escritos cuando se llama a la función de retorno. Devuelve el numero de bytes escritos.
CURLOPT_PASSWDFUNCTION Nombre de la función de llamada de retorno donde la función toma tres parámetros. El primero es el recurso cURL, el segundo es una cadena que contiene la contraseña, y el tercero es la longitud máxima para la contraseña. Devuelve una cadena que contiene la contraseña.
CURLOPT_PROGRESSFUNCTION Nombre de la función de llamada de retorno donde la función toma tres parámetros. El primero es el recurso cURL, el sengudo es el recurso file-descriptor y el tercero es la longitud. Devuelve una cadena que contiene los datos.
CURLOPT_READFUNCTION Nombre de la función de llamada de retorno donde la función toma dos parámetros. El primero es el recurso cURL, y el segundo es una cadena con los datos a leer. Los datos se deben leer usando esta función de retorno. Devuelve el número de bytes leídos. Devuelve 0 para la señal EOF.
CURLOPT_WRITEFUNCTION Nombre de la función de llamda de retorno donde la función toma dos parámetros. El primero es el recurso cURL, y el segundo es una cadena con los datos a ser escritos. Los datos deben ser escritos usando esta función de retorno. Debe devolver el número exacto de bytes a ser escritos o la transferencia será abortada con un error.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Historial de cambios

Versión Descripción
5.2.10 Disponibles CURLOPT_PROTOCOLS, y CURLOPT_REDIR_PROTOCOLS.
5.1.0 Disponibles CURLOPT_AUTOREFERER, CURLOPT_BINARYTRANSFER, CURLOPT_FTPSSLAUTH, CURLOPT_PROXYAUTH, y CURLOPT_TIMECONDITION.
5.0.0 Disponibles CURLOPT_FTP_USE_EPRT, CURLOPT_NOSIGNAL, CURLOPT_UNRESTRICTED_AUTH, CURLOPT_BUFFERSIZE, CURLOPT_HTTPAUTH, CURLOPT_PROXYPORT, CURLOPT_PROXYTYPE, CURLOPT_SSLCERTTYPE, y CURLOPT_HTTP200ALIASES.

Ejemplos

Example #1 Iniciando una nueva sesión cURL y capturando la página web

<?php
// Crear un nuevo recurso cURL
$ch curl_init();

// Configurar URL y otras opciones apropiadas
curl_setopt($chCURLOPT_URL"http://www.example.com/");
curl_setopt($chCURLOPT_HEADERfalse);

// Capturar la URL y pasarla al navegador
curl_exec($ch);

// Cerrar el recurso cURL y liberar recursos del sistema
curl_close($ch);
?>

Example #2 Subiendo un fichero

<?php

/* http://localhost/upload.php:
print_r($_POST);
print_r($_FILES);
*/

$ch curl_init();

$data = array('name' => 'Foo''file' => '@/home/user/test.png');

curl_setopt($chCURLOPT_URL'http://localhost/upload.php');
curl_setopt($chCURLOPT_POST1);
curl_setopt($chCURLOPT_POSTFIELDS$data);

curl_exec($ch);
?>

El resultado del ejemplo sería:

Array
(
    [name] => Foo
)
Array
(
    [file] => Array
        (
            [name] => test.png
            [type] => image/png
            [tmp_name] => /tmp/phpcpjNeQ
            [error] => 0
            [size] => 279
        )

)

Notas

Note:

Si pasamos un array a CURLOPT_POSTFIELDS codificará los datos como multipart/form-data, pero si pasamos una cadena URL-encoded codificará los datos como application/x-www-form-urlencoded.

Ver también


Funciones cURL
PHP Manual