curl_setopt_array
curl_version
cURL Functions
PHP Manual

# curl_setopt

(PHP 4 >= 4.0.2, PHP 5)

curl_setopt — Asigna un valor a una opción de una sesión CURL

### Descripción

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

La función curl_setopt() asigna valores para opciones de una sesión CURL identificada por el parámetro `ch` . El parámetro `option` especifica la opción a la que se desea asignar el valor indicado en el parámetro `value` .

`value` debe ser una variable de tipo bool para los siguientes valores del parámetro `option` :

Opción | Valor de `value` | Notas
--- | --- | ---
`CURLOPT_AUTOREFERER` | `TRUE` para establecer de forma automática el campo Referer: en las peticiones que siguen las redirecciones de tipo Location:. | Available since PHP 5.1.0.
`CURLOPT_BINARYTRANSFER` | `TRUE` para devolver la salida completa cuando se usa `CURLOPT_RETURNTRANSFER`. |
`CURLOPT_COOKIESESSION` | `TRUE` para marcar esta cookie como una nueva cookie de sesión. Obliga a libcurl a ignorar todas las cookies que va a cargar y que son cookies de sesión de una sesión anterior. Por defecto, libcurl guarda y carga todas las cookies, independientemente de si son de sisió o no. Las cookies de sesión son las cookies que no tienen establecida una fecha de expiración y que se supone que solamente deben aplicarse y existir en esta sesión. | Disponible desde PHP 5.1.0.
`CURLOPT_CRLF` | `TRUE` para convertir los caracteres de nueva línea de Unix a caracteres de nueva línea de tipo CRLF en las transferencias. |
`CURLOPT_DNS_USE_GLOBAL_CACHE` | `TRUE` para utilizar una cache de DNS global. Esta opción no es compatible con entornos multi-hilo y por defecto está activada. |
`CURLOPT_FAILONERROR` | `TRUE` para que la ejecución de la función falle de forma "silenciosa" si el código HTTP devuelto es mayor que 300. El comportamiento por defecto es devolver la página normalmente, ignorando el código. |
`CURLOPT_FILETIME` | `TRUE` para intentar obtener la fecha remota de modificación del documento. Se puede obtener el valor empleando la opción `CURLINFO_FILETIME` con la función curl_getinfo(). |
`CURLOPT_FOLLOWLOCATION` | `TRUE` para seguir las cabeceras "Location: " que puede enviar el servidor junto con el resto de las cabeceras HTTP (se debe tener en cuenta que el comportamiento es recursivo, por lo que PHP seguirá tantos encabezados "Location: " como se envien, a no ser que se establezca la opción `CURLOPT_MAXREDIRS`). |
`CURLOPT_FORBID_REUSE` | `TRUE` para forzar que la conexión se cierre de forma explícita cuando la transmisión ha finalizado y por tanto que no se reserve para su posterior reutilización. |
`CURLOPT_FRESH_CONNECT` | `TRUE` para forzar el uso de una conexión nueva en vez de reutilizar una conexión cacheada. |
`CURLOPT_FTP_USE_EPRT` | `TRUE` para emplear EPRT (y LPRT) cuando se están realizado descargas de tipo FTP. Se puede indicar `FALSE` para deshabilitar EPRT y LPRT y utilizar solamente PORT. | Se incluyó en la versión de PHP 5.0.0.
`CURLOPT_FTP_USE_EPSV` | `TRUE` para intentar en primer lugar un comando de tipo EPSV en las transferencias FTP y en segundo lugar un comando de tipo PASV. Se puede indicar `FALSE` para deshabilitar EPSV. |
`CURLOPT_FTPAPPEND` | `TRUE` para escribir a partir del final del archivo remoto en vez de sobreescribirlo. |
`CURLOPT_FTPASCII` | Se trata de un alias de la opción `CURLOPT_TRANSFERTEXT`, que se recomienda utilizar en vez de esta opción. |
`CURLOPT_FTPLISTONLY` | `TRUE` para obtener el listado de los elementos de un directorio de FTP. |
`CURLOPT_HEADER` | `TRUE` para que el encabezado se incluya en la salida. |
`CURLOPT_HTTPGET` | `TRUE` para volver a establecer el método HTTP al tipo GET. El método por defecto es GET, así que solamente es necesaria esta opción si el método ha sido modificado. |
`CURLOPT_HTTPPROXYTUNNEL` | `TRUE` para encaminar la transferencia a través de un tunel establecido con el servidor proxy HTTP indicado. |
`CURLOPT_MUTE` | `TRUE` para que las funciones CURL se comporten de forma completamente "silenciosa". |
`CURLOPT_NETRC` | `TRUE` para obtener el nombre de usuario y la contraseña necesarios para acceder a un sitio remoto a partir del archivo ~/.netrc. |
`CURLOPT_NOBODY` | `TRUE` para no incluir en la salida el contenido del body. |
`CURLOPT_NOPROGRESS` | `TRUE` para deshabilitar el medidor del progreso de las transferencias de tipo CURL. Note: PHP por defecto establece esta opción como `TRUE`, por lo que solamente deberí cambiarse su valor para tareas de depuración. |
`CURLOPT_NOSIGNAL` | `TRUE` para que ninguna de las señales generadas por las funciones CURL se notifiquen la proceso de PHP. En entornos de ejecución de SAPIs multi-hilo está activado por defecto, de forma que las opciones de timeout puedan utilizarse. | Se incluyó en la versión de CURL 7.10 y de PHP 5.0.0.
`CURLOPT_POST` | `TRUE` para ejecutar una petición de tipo HTTP POST. El método empleado por el POST es el de application/x-www-form-urlencoded, que es el habitualmente empleado por los formularios HTML. |
`CURLOPT_PUT` | `TRUE` para ejecutar el método HTTP PUT sobre un archivo. El archivo debe indicarse mediante las opciones `CURLOPT_INFILE` y `CURLOPT_INFILESIZE`. |
`CURLOPT_RETURNTRANSFER` | `TRUE` para devolver el resultado como una cadena de texto que contiene el valor devuelto por la función curl_exec(), en vez de mostrar la salida directamente en la ventana del navegador. |
`CURLOPT_SSL_VERIFYPEER` | `FALSE` para evitar que CURL verifique el certificado del otro extremo. Se pueden especificar otros certificados para verificar mediante la opción `CURLOPT_CAINFO` y también se puede especificar un directorio de certificados mediante la opción `CURLOPT_CAPATH`. La opción `CURLOPT_SSL_VERIFYHOST` se debe establecer a `TRUE` o `FALSE` si la opción `CURLOPT_SSL_VERIFYPEER` está deshabilitada (su valor por defecto es 2). | `TRUE` por defecto en la versión CURL 7.10. Conjunto instalado por defecto con la versión CURL 7.10.
`CURLOPT_TRANSFERTEXT` | `TRUE` para emplear el modo de transmisión ASCII en las transferencias de FTP. Para LDAP, obtiene los datos en formato de texto plano en vez de en formato HTML. En los sistemas Windows, no establece la salida STDOUT a modo binario. |
`CURLOPT_UNRESTRICTED_AUTH` | `TRUE` para enviar el nombre de usuario y la contraseña cuando se siguen las cabeceras de tipo "Location: " (al activar la opción `CURLOPT_FOLLOWLOCATION`). El nombre de usuario y contraseña se envín aun cambiando el nombre del host en las redirecciones. | Se incluyó en la version de PHP 5.0.0.
`CURLOPT_UPLOAD` | `TRUE` para preparar una subida. |
`CURLOPT_VERBOSE` | `TRUE` para obtener la información completa sobre la salida. La salida se escribe en STDERR o en el fichero especificado mediante la opción `CURLOPT_STDERR`. |

El parámetro `value` debe ser un entero para los siguientes valores del parámetro `option` :

Opción | Valor de `value` | Notas
--- | --- | ---
`CURLOPT_BUFFERSIZE` | El tamaño del buffer que se va a utilizar en cada operación de lectura. No se garantiza que la petición consiga llenar el buffer. | Se incluyó en la versión de CURL 7.10 y de PHP 5.0.0.
`CURLOPT_CLOSEPOLICY` | Puede ser o `CURLCLOSEPOLICY_LEAST_RECENTLY_USED` o `CURLCLOSEPOLICY_OLDEST` . Existen otros tres valores para CURLCLOSEPOLICY_, pero CURL no los soporta todaví. |
`CURLOPT_CONNECTTIMEOUT` | El número de segundos que se pueden esperar como máximo intentando establecer la conexión. Si se le da un valor de 0 (cero), se espera indefinidamente. |
`CURLOPT_DNS_CACHE_TIMEOUT` | El número de segundos que se mantienen las entradas de DNS en memoria. Por defecto toma un valor de 120 segundos (2 minutos). |
`CURLOPT_FTPSSLAUTH` | El método de autenticación de FTP (si se utiliza autenticación): CURLFTPAUTH_SSL (intentar primero SSL), CURLFTPAUTH_TLS (intentar primero TLS) o CURLFTPAUTH_DEFAULT (dejar que CURL decida el método). | Se incluyó en la versión de CURL 7.12.2 y de PHP 5.1.0.
`CURLOPT_HTTP_VERSION` | `CURL_HTTP_VERSION_NONE` (por defecto se deja a CURL que decida que versión usar), `CURL_HTTP_VERSION_1_0` (fuerza a usar HTTP/1.0), o `CURL_HTTP_VERSION_1_1` (fuerza a usar HTTP/1.1). |
`CURLOPT_HTTPAUTH` | El método de autenticación HTTP a utilizar. Las opciones son: `CURLAUTH_BASIC` , `CURLAUTH_DIGEST` , `CURLAUTH_GSSNEGOTIATE` , `CURLAUTH_NTLM` , `CURLAUTH_ANY` y `CURLAUTH_ANYSAFE` . Se puede utilizar el operador bitwise | (conocido como "or") para combinar más de un método. Si se utiliza una combinación de métodos, CURL sondea al servidor para comprobar qué métodos soporta y así elegir el mejor de los soportados. `CURLAUTH_ANY` es un alias de CURLAUTH_BASIC | CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. `CURLAUTH_ANYSAFE` es un alias de CURLAUTH_DIGEST | CURLAUTH_GSSNEGOTIATE | CURLAUTH_NTLM. | Se incluyó en la versión de PHP 5.0.0.
`CURLOPT_INFILESIZE` | El tamaño esperado en bytes del archivo empleado en una operación de subida de un archivo a un sitio remoto. |
`CURLOPT_LOW_SPEED_LIMIT` | La velocidad de transmisión, en bytes por segundo, que la transferencia debe obtener de manera continua durante `CURLOPT_LOW_SPEED_TIME` segundos para que PHP considere la transferencia demasiado lenta y la aborte. |
`CURLOPT_LOW_SPEED_TIME` | El número de segundos que la transferencia debe obtener de manera continua una velocidad de transferencia inferior a `CURLOPT_LOW_SPEED_LIMIT` bytes por segundo para que PHP considere la transferencia demasiado lenta y la aborte. |
`CURLOPT_MAXCONNECTS` | El número máximo de conexiones persistentes permitidas. Cuando se alcanza el límite establecido, se utiliza la opción `CURLOPT_CLOSEPOLICY` para determinar que conexión se cierra. |
`CURLOPT_MAXREDIRS` | El número máximo de redirecciones HTTP que se siguen. Se utiliza junto con la opción `CURLOPT_FOLLOWLOCATION`. |
`CURLOPT_PORT` | Un número de puerto alternativo para realizar la conexión. |
`CURLOPT_PROXYAUTH` | Los métodos de autenticación HTTP empleados para una conexión proxy. Se emplean las mismas máscaras de bits que las descritas para la opción `CURLOPT_HTTPAUTH`. Para la autenticación proxy, solo se permiten los valores `CURLAUTH_BASIC` y `CURLAUTH_NTLM` . | Se incluyó en la versión de CURL 7.10.7 y de PHP 5.1.0.
`CURLOPT_PROXYPORT` | El número de puerto que se utiliza en las conexiones proxy. Este número se puede establecer también mediante la opción `CURLOPT_PROXY`. | Se incluyó en la versión de PHP 5.0.0.
`CURLOPT_PROXYTYPE` | Puede tomar el valor `CURLPROXY_HTTP` (valor por defecto) o `CURLPROXY_SOCKS5` . | Se incluyó en la versión de CURL 7.10 y de PHP 5.0.0.
`CURLOPT_RESUME_FROM` | La posición en bytes desde la que se reanuda la transferencia. |
`CURLOPT_SSL_VERIFYHOST` | 1 para comprobar la existencia de un nombre común en el certificado SSL del otro extremo. 2 para comprobar la existencia de un nombre común y además comprobar si coincide el nombre del host proporcionado. |
`CURLOPT_SSLVERSION` | La versión de SSL a utilizar (puede ser 2 o 3). Por defecto PHP trata de determinarlo por si mismo, aunque en algunos casos puede ser necesario indicarlo manualmente. |
`CURLOPT_TIMECONDITION` | Manera en la que se trata la opción `CURLOPT_TIMEVALUE`. Si se indica el valor `CURL_TIMECOND_IFMODSINCE` , se devuelve la página solamente si ha sido modificada desde la fecha indicada en la opción `CURLOPT_TIMEVALUE`. Si no ha sido modificada, se devuelve una cabecera de tipo "304 Not Modified" si la opción `CURLOPT_HEADER` es `TRUE`. Si se indica el valor `CURL_TIMECOND_ISUNMODSINCE` el efecto conseguido es el contrario. El valor por defecto es `CURL_TIMECOND_IFMODSINCE` . | Se incluyó en la versión de PHP 5.1.0.
`CURLOPT_TIMEOUT` | El número máximo de segundos que CURL espera a que se ejecuten las funciones. |
`CURLOPT_TIMEVALUE` | La fecha en número de segundos transcurridos desde el 1 de Enero de 1970. La fecha se utiliza con la opción `CURLOPT_TIMECONDITION`. Por defecto, se utiliza el parámetro `CURL_TIMECOND_IFMODSINCE` . |

`value` debe ser una cadena de texto para los siguientes valores del parámetro `option` :

Opción | Valor de `value` | Notas
--- | --- | ---
`CURLOPT_CAINFO` | El nombre del archivo que contiene uno o más certificados utilizados para la verificación con el otro extremo. Solamente es útil cuando se utiliza conjuntamente con la opción `CURLOPT_SSL_VERIFYPEER`. |
`CURLOPT_CAPATH` | El directorio que contiene los certificados de las CA. Se utiliza junto con la opción `CURLOPT_SSL_VERIFYPEER`. |
`CURLOPT_COOKIE` | El contenido de la cabecera "Set-Cookie: " que se utiliza en la petición HTTP. |
`CURLOPT_COOKIEFILE` | El nombre del archivo que contiene los datos de las cookies. El archivo puede tener el formato definido por Netscape o el formato de cabeceras HTTP volcadas directamente a un archivo en texto plano. |
`CURLOPT_COOKIEJAR` | El nombre del archivo en el que se guardan todas las cookies internas cuando se cierra la conexión. |
`CURLOPT_CUSTOMREQUEST` | Un método personalizado a utilizar en lugar de "GET" o "HEAD" cuando se hace una petición HTTP. Se utiliza cuando se quieren realizar peticiones HTTP no habituales como por ejemplo "DELETE". Los valores válidos son del tipo "GET", "POST", "CONNECT" y similares; esto es, no se debe introducir un valor complejo como por ejemplo "GET /index.html HTTP/1.0\r\n\r\n". Note: No se deben emplear métodos personalizados si no se está seguro de que el servidor remoto los soporta. |
`CURLOPT_EGBSOCKET` | Es como `CURLOPT_RANDOM_FILE`, salvo que se indica un socket al demonio generador de entropía. |
`CURLOPT_ENCODING` | Los contenidos de la cabecera "Accept-Encoding: ". De esta forma, se permite la decodificación de la respuesta. Los valores permitidos son los de "identity", "deflate" y "gzip". Si se indica una cadena vací (""), se envía una cabecera que incluye todos los tipos de codificación. | Se incluyó en la versión de PHP 5.0.0.
`CURLOPT_FTPPORT` | El valor que se utiliza para obtener la dirección IP que se emplea en la instrucción "POST" de FTP. La instrucción "POST" indica al servidor remoto que se conecte a la dirección IP especificada. La cadena puede ser una dirección IP, el nombre de un host, el nombre de un interfaz de red (en entornos Unix) o el valor '-' para utilizar la dirección IP por defecto del sistema. |
`CURLOPT_INTERFACE` | El nombre del interfaz de red de salida a utilizar. Se puede indicar como nombre de interfaz, dirección IP o nombre de host. |
`CURLOPT_KRB4LEVEL` | El nivel de seguridad de KRB4 (Kerberos 4). Se permite cualquiera de los siguientes valores (ordenados de menos a m´s fuerte): "clear", "safe", "confidential", "private".. Si la cadena proporcionada no contiene ninguno de esos valores, se utiliza el valor "private". Si se proporciona un valor de `NULL`, se deshabilita la seguridad KRB4. Actualmente, este tipo de seguridad solamente funciona en las transferencias FTP. |
`CURLOPT_POSTFIELDS` | Los datos a enviar en una operación de tipo HTTP "POST". |
`CURLOPT_PROXY` | El proxy HTTP a través del que se encaminan las peticiones. |
`CURLOPT_PROXYUSERPWD` | El nombre de usuario y contraseña (indicados con el formato "[username]:[password]") que se van a utilizar para realizar la conexión con el proxy. |
`CURLOPT_RANDOM_FILE` | El nombre del archivo que se va a emplear para alimentar el generador de números aleatorios empleado por SSL. |
`CURLOPT_RANGE` | Rango de datos que se quieren obtener indicados de la forma "X-Y", donde X o Y son opcionales. Las transferencias HTTP soportan varios rangos diferentes simultaneos separados por comas, de la forma "X-Y,N-M". |
`CURLOPT_REFERER` | El contenido de la cabecera "Referer: " empleada en la petición HTTP. |
`CURLOPT_SSL_CIPHER_LIST` | La lista de algoritmos de tipo cipher a emplear por SSL. Los siguientes valores son válidos: RC4-SHA y TLSv1. |
`CURLOPT_SSLCERT` | El nombre del archivo que contiene el certificado almacenado en formato PEM. |
`CURLOPT_SSLCERTPASSWD` | La contraseña necesaria para utilizar el certificado `CURLOPT_SSLCERT`. |
`CURLOPT_SSLCERTTYPE` | El formato del certificado. Los formatos soportados son "PEM" (valor por defecto), "DER" y "ENG". | se incluyó en la versión de CURL 7.9.3 y de PHP 5.0.0.
`CURLOPT_SSLENGINE` | El identificador del generador criptográfico de la clave privada de SSL especificada en la opción `CURLOPT_SSLKEY`. |
`CURLOPT_SSLENGINE_DEFAULT` | El identificador del generador criptográfico empleado en las operaciones criptográficas simétricas. |
`CURLOPT_SSLKEY` | El nombre del archivo que contiene la clave privada de SSL. |
`CURLOPT_SSLKEYPASSWD` | La contraseña secreta necesaria para utilizar la clave privada de SSL especificada en la opció `CURLOPT_SSLKEY`. Note: Como esta opció requiere del uso de una contraseña que debe almacenarse en un lugar seguro, recuerde mantener el script de PHP en un entorno de ejecución seguro. |
`CURLOPT_SSLKEYTYPE` | El tipo de clave privada de SSL especificada en `CURLOPT_SSLKEY`. Los valores permitidos son "PEM" (valor por defecto), "DER" y "ENG". |
`CURLOPT_URL` | La URL que se quiere obtener. También se puede establecer su valor al inicializar una sesión con la función curl_init(). |
`CURLOPT_USERAGENT` | El contenido de la cabecera "User-Agent: " enviada en las peticiones HTTP. |
`CURLOPT_USERPWD` | El nombre de usuario y contraseña (con el formato "[username]:[password]") que se va a utilizar para realizar la conexión. |

`value` debería ser una variable de tipo array para los siguientes valores del parámetro `option` :

Opción | Valor de `value` | Notas
--- | --- | ---
`CURLOPT_HTTP200ALIASES` | Array de respuestas HTTP de tipo 200 que se tratarán como respuestas válidas y no errores. | Se incluyó en la versió de CURL 7.10.3 y de PHP 5.0.0.
`CURLOPT_HTTPHEADER` | Array de valores de cabeceras HTTP que se van a enviar. |
`CURLOPT_POSTQUOTE` | Array de comandos FTP que se van a ejecutar en el servidor remoto después de que se haya ejecutado la petición FTP. |
`CURLOPT_QUOTE` | Array de comandos FTP que se van a ejecutar en el servidor remoto antes de que se haya ejecutado la petición FTP. |

`value` debe ser un recurso de tipo stream (obtenido por ejemplo mediante la función fopen()) para los siguientes valores del parámetro `option` :

Opción | Valor de `value` | Notas
--- | --- | ---
`CURLOPT_FILE` | Archivo al que se van a volcar los datos de la transferencia. Por defecto es STDOUT (por tanto, generalmente la ventana del navegador). |
`CURLOPT_INFILE` | Archivo del que la transferencia debe obtener los datos para las peticiones de tipo subida. |
`CURLOPT_STDERR` | Recurso alternativo para escribir los errores producidos en lugar de STDERR. |
`CURLOPT_WRITEHEADER` | Archivo en el que se escribe la parte de las cabeceras de la transferencia. |

`value` debe ser una cadena de texto con el nombre válido de una función de tipo callback para los siguientes valores del parámetro `option` :

Opción | Valor de `value` | Notas
--- | --- | ---
`CURLOPT_HEADERFUNCTION` | Nombre de la función de callback que requiere de 2 argumentos. El primero es el recurso CURL y el segundo es una cadena que contiene los datos de la cabecera que se deben escribir. Si se utiliza esta función de callback, el programador tiene la responsabilidad de escribir los datos de la cabecera. La función devuelve el número de bytes escritos. |
`CURLOPT_PASSWDFUNCTION` | Nombre de la función de callback que requiere de 3 argumentos. El primero es el recurso CURL, el segundo es una cadena de texto que solicita que se introduzca una contraseña y el tercero es la longitud máxima de la contraseña. La función devuelve una cadena de texto que contiene la contraseña. |
`CURLOPT_READFUNCTION` | Nombre de la función de callback que requiere de 2 argumentos. El primero es el recurso CURL y el segundo es una cadena con los datos a leer. Si se utiliza esta función, el programador tiene la responsabilidad de leer los datos. La función devuelve el número de bytes leidos y devuelve 0 (cero) si se llega al final del archivo (EOF). |
`CURLOPT_WRITEFUNCTION` | Nombre de la función de callback que requiere de 2 argumentos. El primero es el recurso CURL y el segundo es una cadena de texto con los datos a escribir. Si se utiliza esta función, el programador tiene la responsabilidad de escribir los datos. La función debe devolver el número exacto de bytes que se han escrito o se producirá un error. |

Example #1 Inicializar una nueva sesión CURL y obtener una página web

`<?php
// Se crea un manejador CURL
$ch = curl_init();
// Se establece la URL y algunas opciones
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, false);
// Se obtiene la URL indicada
curl_exec($ch);
// Se cierra el recurso CURL y se liberan los recursos del sistema
curl_close($ch);
?>`

curl_setopt_array
curl_version
cURL Functions
PHP Manual