# curl_setopt

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

curl_setopt — Configura una opción para una transferencia cURL

### Descripción

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

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 `option`.

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

  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 sin tratar `CURLOPT_RETURNTRANSFER` está activado. | Desde PHP 5.1.3, esta opción no tiene efecto: el resultado sin tratar será siempre retornado cuando `CURLOPT_RETURNTRANSFER` sea usado.
  `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_CERTINFO` | `true` para mostrar información sobre certificación SSL al `STDERR` en transferencias seguras. | Añadido en cURL 7.19.1 Disponible desde PHP 5.3.2. Requiere `CURLOPT_VERBOSE` activado para que tenga efecto.
  `CURLOPT_CONNECT_ONLY` | `true` le dice a la biblioteca que realice todas las autenticaciones de proxy requeridas y la configuración de la conexión, pero no la transferencia de datos. Esta opción se implementa para HTTP, SMTP y POP3. | Aladida en 7.15.2. Disponbible desde PHP 5.5.0.
  `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 con verbosidad 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_SSL_FALSESTART` | `true` para habilitar el inicio falso de TLS. | Añadida en cURL 7.42.0. Disponible desde PHP 7.0.7.
  `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_FTP_CREATE_MISSING_DIRS` | `true` para crear directorios faltantes cuando una operación se encuentra con una ruta que actualmente no existe. |
  `CURLOPT_FTPAPPEND` | `true` para añadir al fichero remoto en lugar de sobreescribirlo. |
  `CURLOPT_TCP_NODELAY` | `true` para deshabilitar el algoritmo de TCP de Nagle, el cual intenta minimizar el número de paquetes pequeños en la red. | Disponible desde PHP 5.2.1 para versiones compiladas con libcurl 7.11.2 o superior.
  `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. | Eliminado en cURL 7.15.5 (Se puede usar CURLOPT_RETURNTRANSFER en su lugar)
  `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. Nota: 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_PATH_AS_IS` | `true` para no manejar secuencias de puntos. | Añadida en cURL 7.42.0. Disponible desde PHP 7.0.7.
  `CURLOPT_PIPEWAIT` | `true` para esperar por 'pipelining'/multiplexación. | Añadida en cURL 7.43.0. Disponible desde PHP 7.0.7.
  `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_SAFE_UPLOAD` | `true` para deshabilitar el soporta para el prefijo `@` para cargar ficheros en `CURLOPT_POSTFIELDS`, lo que significa que los valores que empiecen por `@` pueden ser pasados de forma segura como campos. Se podría usar CURLFile en su lugar para las cargas. | Añadido en PHP 5.5.0 con `false` como valor predeterminado. PHP 5.6.0 cabia este valor predeterminado a `true`. PHP 7 elimina esta opción; la interfaz de CURLFile debe emplearse para subir ficheros.
  `CURLOPT_SASL_IR` | `true` para habilitar el envío de la respuesta inicial en el primer paquete. | Añadida en cURL 7.31.10. Disponible desde PHP 7.0.7.
  `CURLOPT_SSL_ENABLE_ALPN` | `false` para inhabilitar ALPN en la negociación de SSL (si libcurl del «backend» de SSL está construido para admitirla), lo cual se puede usar para negiaciar http2. | Añadida en cURL 7.36.0. Disponible desde PHP 7.0.7.
  `CURLOPT_SSL_ENABLE_NPN` | `false` para inhabilitar NPN en la negociación de SSL (si libcurl del «backend» de SSL está construido para admitirla), lo cual se puede usar para negiaciar http2. | Añadida en cURL 7.36.0. Disponible desde PHP 7.0.7.
  `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`. | `true` por omisión desde cURL 7.10. Paquete instalado por defecto en la versión CURL 7.10.
  `CURLOPT_SSL_VERIFYSTATUS` | `true` para verificar el estado del certificado. | Añadida en cURL 7.41.0. Disponible desde PHP 7.0.7.
  `CURLOPT_TCP_FASTOPEN` | `true` Para habilitar la Apertura Rápida de TCP (TCP Fast Open). | Añadida en cURL 7.49.0. Disponible desde PHP 7.0.7.
  `CURLOPT_TFTP_NO_OPTIONS` | `true` para no enviar peticiones de opciones de TFTP. | Añadida en cURL 7.48.0. Disponible desde PHP 7.0.7.
  `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`. |

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

  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` | Uno de los valores de `CURLCLOSEPOLICY_*`. Nota: Esta opción está obsoleta, ya que nunca se ha implementado en cURL, por lo que nunca ha tenido ningún efecto. | Eliminada en PHP 5.6.0.
  `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. Si se ha compilado libcurl para utilizar el sistema estándar de resolución de nombres, esta porción de conexión utilizará una resolución completa de un segundo en tiempos de expiración, con un mínimo permitido de un segundo. | 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_EXPECT_100_TIMEOUT_MS` | El tiempo de espera para respuestas «Expect: 100-continue», en milisegundos. El valor predeterminado es 1000 milisegundos. | Añadida en cURL 7.36.0. Disponible desde PHP 7.0.7.
  `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_HEADEROPT` | Cómo tratar con cabeceras. una de las siguientes constantes: `CURLHEADER_UNIFIED`: las cabeceras especificadas en `CURLOPT_HTTPHEADER` se usarán en peticiones tanto a servidores como a proxies. Con esta opción habilitada, `CURLOPT_PROXYHEADER` no tendrá efecto. `CURLHEADER_SEPARATE`: hace que las cabeceras `CURLOPT_HTTPHEADER` solamente sean enviadas a un servidor y no a un proxy. Las cabeceras de proxies deben establecerse con `CURLOPT_PROXYHEADER` para poder usarlas. Observe que si se envía una petición no CONNECT a un proxy, libcurl enviará tanto las cabeceras de servidor como del proxy. Al realizar CONNECT, libcurl enviará cabeceras `CURLOPT_PROXYHEADER` solamente al proxy y luego cabeceeras `CURLOPT_HTTPHEADER` solamente al servidor. Lo predeterminado es `CURLHEADER_SEPARATE` a partir de cURL 7.42.1, y `CURLHEADER_UNIFIED` anteriormente. | Añadida en cURL 7.37.0. Disponible desde PHP 7.0.7.
  `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. Téngase en cuenta que el uso de esta opción no detendrá libcurl a la hora de enviar más datos, exactamente lo que se envía depende de `CURLOPT_READFUNCTION`. |
  `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_POSTREDIR` | Una máscara de bit de 1 (301 Movido permanentemente), 2 (302 Encontrado) y 4 (303 Ver otro) si el método POST de HTTP debería ser mantenido cuando `CURLOPT_FOLLOWLOCATION` está establecido y ocurre un tipo específico o una redirección. | Añadido en cURL 7.19.1. Disponible des PHP 5.3.2.
  `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), `CURLPROXY_SOCKS4`, `CURLPROXY_SOCKS5`, `CURLPROXY_SOCKS4A` o `CURLPROXY_SOCKS5_HOSTNAME`. | 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_OPTIONS` | Establecer las opciones de funcionamento de SSL, las cuales son una máscara de bits de las siguientes constantes: `CURLSSLOPT_ALLOW_BEAST`: no intentar usar ningún método alternativo para defectos de seguridad en los protocolos SSL3 y TLS1.0. `CURLSSLOPT_NO_REVOKE`: inhabilitar la comprobación de revocación de certificados para aquellos «backends» de SSL donde tal funcionamiento está presente. | Añadida en cURL 7.25.0. Disponible desde PHP 7.0.7.
  `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. `0` para no comprobar nombres. En entornos de producción el valor de esta opción debe mantenerse a `2` (valor predeterminado). | Soporte para el valor `1` eliminado en cURL 7.28.1
  `CURLOPT_SSLVERSION` | Una de las constantes `CURL_SSLVERSION_DEFAULT` (0), `CURL_SSLVERSION_TLSv1` (1), `CURL_SSLVERSION_SSLv2` (2), `CURL_SSLVERSION_SSLv3` (3), `CURL_SSLVERSION_TLSv1_0` (4), `CURL_SSLVERSION_TLSv1_1` (5) o `CURL_SSLVERSION_TLSv1_2` (6). Nota: Lo mejor es no establecerlo y dejar el valor predeterminado. Establecerlo a 2 o 3 es muy peligroso dadas las vulnerabilidades conocidas en SSLv2 y SSLv3. |
  `CURLOPT_STREAM_WEIGHT` | Establecer el peso del flujo numérico (un número entre 1 y 256). | Añadida en cURL 7.46.0. Disponible desde PHP 7.0.7.
  `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. Si se ha compilado libcurl para utilizar el sistema estándar de resolución de nombres, esta porción de conexión utilizará una resolución completa de un segundo en tiempos de expiración, con un mínimo permitido de un segundo. | 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`. |
  `CURLOPT_MAX_RECV_SPEED_LARGE` | Si una descarga supera esta velocidad (en bytes por segundo) en su tasa media de transferencia, ésta se detendrá temporalmente para mantener la media igual o inferior al valor del parámetro. Por omisión, la velocidad es ilimitada. | Añadido en cURL 7.15.5. Disponible desde PHP 5.4.0.
  `CURLOPT_MAX_SEND_SPEED_LARGE` | Si una subida supera esta velocidad (en bytes por segundo) en su tasa media de transferencia, ésta se detendrá temporalmente para mantener la media igual o inferior al valor del parámetro. Por omisión, la velocidad es ilimitada. | Añadido en cURL 7.15.5. Disponible desde PHP 5.4.0.
  `CURLOPT_SSH_AUTH_TYPES` | Una máscara de bits que consta de una o más de `CURLSSH_AUTH_PUBLICKEY`, `CURLSSH_AUTH_PASSWORD`, `CURLSSH_AUTH_HOST`, `CURLSSH_AUTH_KEYBOARD`. Establece a `CURLSSH_AUTH_ANY` para que libcurl elija uno. | Añadido en cURL 7.16.1.
  `CURLOPT_IPRESOLVE` | Permite a una aplicación seleccionar el tipo de dirección IP a usar cuando se resuelven nombres de host. Esto es interesante solamente al usar nombres de host que resuelven direcciones usando más de una versión de IP. Los valores posibles son `CURL_IPRESOLVE_WHATEVER`, `CURL_IPRESOLVE_V4`, `CURL_IPRESOLVE_V6`; el predeterminado es `CURL_IPRESOLVE_WHATEVER`. | Añadida en cURL 7.10.8.
  `CURLOPT_FTP_FILEMETHOD` | Indicar a curl qué método empelar para alcanzar un fichero en un servidor FTP(S). Los valores posibles son `CURLFTPMETHOD_MULTICWD`, `CURLFTPMETHOD_NOCWD` y `CURLFTPMETHOD_SINGLECWD`. | Añadida en cURL 7.15.1. Disponible desde PHP 5.3.0.

  El `value` debe ser una string para los siguientes valores del parámetro `option`:

  Opción | Configurar `value` 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`. | Podría requerir una ruta absoluta.
  `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. Si el nombre es una cadena vacía, no se cargarán cookies, aunque el manejo de cookies aún está habilitado. |
  `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"`. Nota: No cambie este valor sin antes asegurarse que el servidor soporta el método de petición personalizado. |
  `CURLOPT_DEFAULT_PROTOCOL` | El protocolo predeterminado a usar si al URL le falta un nombre de esquema. | Añadida en cURL 7.45.0. Disponible desde PHP 7.0.7.
  `CURLOPT_DNS_INTERFACE` | Establecer el nombre de la interfaz de red a la que el resolvente de DNS debe vincularse. Debe ser un nombre de interfaz (no una dirección). | Añadida en cURL 7.33.0. Disponible desde PHP 7.0.7.
  `CURLOPT_DNS_LOCAL_IP4` | Establecer la dirección IPv4 local a la que debe vincularse el resolvente. El argumento debe contener una dirección IPv4 numérica dada como cadena. | Añadida en cURL 7.33.0. Disponible desde PHP 7.0.7.
  `CURLOPT_DNS_LOCAL_IP6` | Establecer la dirección IPv6 local a la que debe vincularse el resolvente. El argumento debe contener una dirección IPv6 numérica dada como cadena. | Añadida en cURL 7.33.0. Disponible desde PHP 7.0.7.
  `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 "PORT". La instrucción "PORT" dice al servidor remoto a qué 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_KEYPASSWD` | El password requerido para usar la clave privada `CURLOPT_SSLKEY` o `CURLOPT_SSH_PRIVATE_KEYFILE`. | Añadido en cURL 7.16.1.
  `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_LOGIN_OPTIONS` | Se puede usar para establecer las opciones de inicio de sesión específicas del protocolo, tales como el mecanismoe de autenticación preferido mediante "AUTH=NTLM" o "AUTH=*", debiéndose ser usada junto con la opción `CURLOPT_USERNAME`. | Añadida en cURL 7.34.0. Disponible desde PHP 7.0.7.
  `CURLOPT_PINNEDPUBLICKEY` | Establecer la clave pública fijada. La cadena puede ser el nombre de fichero de la clave pública fijada. El formato de fichero esperado es "PEM" o "DER". La cadena también puede ser cualquier númbero de «hashes» sha256 codificados en base64 precedidos de "sha256//" y separados por ";". | Añadida en cURL 7.39.0. Disponible desde PHP 7.0.7.
  `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 especificar explícitamente el tipo de fichero añadiendo el tipo al nombre del fichero, en el formato '`;type=mimetype`'. 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 `value` es un array, el encabezado `Content-Type` será definido como `multipart/form-data`. A partir de PHP 5.2.0, `value` debe ser un array si los archivos son pasados a esta opción con el prefijo `@`. A partir de PHP 5.5.0, el prefijo `@` está obsoleto, por lo que los ficheros se pueden enviar usando CURLFile. El prefijo `@` puede ser deshabilitado por seguridad de proporcionar valores que comienzan con `@` estableciendo la opción `CURLOPT_SAFE_UPLOAD` a `true`. |
  `CURLOPT_PRIVATE` | Cualquier dato que debería estar asociado con este manejador de cURL. Estos datos puede ser recuperados posteriormente con la opción `CURLINFO_PRIVATE` de curl_getinfo(). cURL no hace nada con estos datos. Al emplear un multimanejador de cURL, estos datos privados son típicamente una clave única para identificar un manejador estándar de cURL. | Añadida en cURL 7.10.3.
  `CURLOPT_PROXY` | El proxy HTTP para enviar peticiones a través de tunel. |
  `CURLOPT_PROXY_SERVICE_NAME` | El nombre del servicio de autenticación del proxy. | Añadida en cURL 7.34.0. Disponible desde PHP 7.0.7.
  `CURLOPT_PROXYUSERPWD` | Usuario y contraseña con el siguiente formato `"[username]:[password]"` 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_SERVICE_NAME` | El nombre del servicio de autenticación. | Añadida en cURL 7.43.0. Disponible desde PHP 7.0.7.
  `CURLOPT_SSH_HOST_PUBLIC_KEY_MD5` | Un string que contiene 32 dígitos hexadecimales. El string debe ser el MD5 checksum de la clave pública del host remoto, y libcurl rechazará la conexión a el host a menos que el md5sums coincida. Esta opción es sólo para las transferencias SCP y SFTP. | Añadido en cURL 7.17.1.
  `CURLOPT_SSH_PUBLIC_KEYFILE` | El nombre de el fichero de la clave pública. Si no se utiliza, libcurl por omisión usa $HOME/.ssh/id_dsa.pub si la variable de entorno HOME es establecida, y "id_dsa.pub" en el directorio actual si HOME no está establecida. | Añadido en cURL 7.16.1.
  `CURLOPT_SSH_PRIVATE_KEYFILE` | El nombre de el fichero de la clave privada. Si no se utiliza, libcurl por omisión usa $HOME/.ssh/id_dsa si la variable de entorno HOME es establecida, y "id_dsa" en el directorio actual si HOME no está establecida. Si el fichero está protegido con contraseña, establecer la contraseña con la constante `CURLOPT_KEYPASSWD`. | Añadido en cURL 7.16.1.
  `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`. Nota: 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_UNIX_SOCKET_PATH` | Habilita el uso de sockets de dominio Unix como extremos de conexión y establece la ruta al string dado. | Añadida en cURL 7.40.0. Disponible desde PHP 7.0.7.
  `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_USERNAME` | El nombre de usuario a emplear en la autenticación. | Añadida en cURL 7.19.0. Disponible desde PHP 5.5.0.
  `CURLOPT_USERPWD` | Nombre de usuario y contraseña siguiendo el formato `"[username]:[password]"` para ser usado en la conexión. |
  `CURLOPT_XOAUTH2_BEARER` | Especifica el «token» de acceso de OAuth 2.0. | Añadida en cURL 7.33.0. Disponible desde PHP 7.0.7.

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

  Opción | Configurar `value` a | Notas
  --- | --- | ---
  `CURLOPT_CONNECT_TO` | Se conecta a un puerto y host específicos en lugar del puerto y host del URL. Acepta un array de cadenas con el formato `HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT`. | Añadida en cURL 7.49.0. Disponible desde PHP 7.0.7.
  `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_PROXYHEADER` | Un array de cabeceras HTTP personalizadas a pasar a los proxies. | Añadida en cURL 7.37.0. Disponible desde PHP 7.0.7.
  `CURLOPT_QUOTE` | Un array de comandos FTP a ejecutar en el servidor antes de que se realice la petición FTP. |

  El `value` debe ser un recurso de flujo (usando fopen(), por ejemplo) para los siguientes valores del parámetro `option`:

  Opción | Configurar `value` a
  --- | ---
  `CURLOPT_FILE` | El fichero en el que el proceso de transferencia guardará el resultado. Por defecto es `STDOUT` (la ventana del navegador).
  `CURLOPT_INFILE` | El fichero que el proceso de transferencia debe leer a la hora de subir un fichero.
  `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.

  `value` debería ser el nombre de una función válida o un objeto Closure para los siguientes valores del parámetro `option`:

  Opción | Configurar `value` a
  --- | ---
  `CURLOPT_HEADERFUNCTION` | Una llamada de retorno que acepta dos parámetros. El primero es el recurso cURL, el segundo es un string con los datos de la cabecera a escribir. Los datos de la cabecera deben ser escritos por esta llamada de retorno. Devuelve el número de bytes escritos.
  `CURLOPT_PASSWDFUNCTION` | Una llamada de retorno que acepta tres parámetros. El primero es el recurso cURL, el segundo es un string que contiene la contraseña, y el tercero es la longitud máxima para la contraseña. Devuelve un string que contiene la contraseña.
  `CURLOPT_PROGRESSFUNCTION` | Una llamada de retorno que acepta cinco parámetros. El primero es el recurso cURL, el segundo es el número total de bytes que se espera descargar en esta transferencia, el tercero es el número de bytes descargados hasta ahora, el cuarto es el número total de bytes que se espera subir en esta transferencia, y el quinto es el número de bytes subidos hasta ahora. Nota: La llamada de retorno solamente se invoca cuando la opción `CURLOPT_NOPROGRESS` está establecida a `false`. Devuelve un valor distinto de cero para abortar la transferencia. En este caso, la transferencia establecerá un error `CURLE_ABORTED_BY_CALLBACK`.
  `CURLOPT_READFUNCTION` | Una llamada de retorno que acepta tres parámetros. El primero es el recurso cURL, el segundo es un recurso de flujo de datos proporcionado a través de la opción `CURLOPT_INFILE`, y el tercero es la máxima cantidad de datos a leer. La llamada de retorno debe devolver un string con la misma longitud o menor que la cantidad de datos pedidos, normalmente leyéndolos del recurso de flujo de datos pasado. Debe devolver una cadena vacía para marcar el `EOF`.
  `CURLOPT_WRITEFUNCTION` | Una llamada de retorno que acepta dos parámetros. El primero es el recurso cURL, el segundo es un string con los datos a escribir. Los datos deben ser guardados por esta llamada de retorno. Debe devolver el número exacto de bytes escritos o la transferencia será abortada con un error.

  Otros valores:

  Opción | Establecer `value` a
  --- | ---
  `CURLOPT_SHARE` | Un resultado de curl_share_init(). Hace que el gestor de cURL use los datos del gestor compartido.

### Valores devueltos

Devuelve `true` en caso de éxito o `false` en caso de error.

### Historial de cambios

Versión | Descripción
--- | ---
7.0.7 | Se introdujeron `CURL_HTTP_VERSION_2`, `CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE`, `CURL_HTTP_VERSION_2TLS`, `CURL_REDIR_POST_301`, `CURL_REDIR_POST_302`, `CURL_REDIR_POST_303`, `CURL_REDIR_POST_ALL`, `CURL_VERSION_KERBEROS5`, `CURL_VERSION_PSL`, `CURL_VERSION_UNIX_SOCKETS`, `CURLAUTH_NEGOTIATE`, `CURLAUTH_NTLM_WB`, `CURLFTP_CREATE_DIR`, `CURLFTP_CREATE_DIR_NONE`, `CURLFTP_CREATE_DIR_RETRY`, `CURLHEADER_SEPARATE`, `CURLHEADER_UNIFIED`, `CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE`, `CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE`, `CURLMOPT_MAX_HOST_CONNECTIONS`, `CURLMOPT_MAX_PIPELINE_LENGTH`, `CURLMOPT_MAX_TOTAL_CONNECTIONS`, `CURLOPT_CONNECT_TO`, `CURLOPT_DEFAULT_PROTOCOL`, `CURLOPT_DNS_INTERFACE`, `CURLOPT_DNS_LOCAL_IP4`, `CURLOPT_DNS_LOCAL_IP6`, `CURLOPT_EXPECT_100_TIMEOUT_MS`, `CURLOPT_HEADEROPT`, `CURLOPT_LOGIN_OPTIONS`, `CURLOPT_PATH_AS_IS`, `CURLOPT_PINNEDPUBLICKEY`, `CURLOPT_PIPEWAIT`, `CURLOPT_PROXY_SERVICE_NAME`, `CURLOPT_PROXYHEADER`, `CURLOPT_SASL_IR`, `CURLOPT_SERVICE_NAME`, `CURLOPT_SSL_ENABLE_ALPN`, `CURLOPT_SSL_ENABLE_NPN`, `CURLOPT_SSL_FALSESTART`, `CURLOPT_SSL_VERIFYSTATUS`, `CURLOPT_STREAM_WEIGHT`, `CURLOPT_TCP_FASTOPEN`, `CURLOPT_TFTP_NO_OPTIONS`, `CURLOPT_UNIX_SOCKET_PATH`, `CURLOPT_XOAUTH2_BEARER`, `CURLPROTO_SMB`, `CURLPROTO_SMBS`, `CURLPROXY_HTTP_1_0`, `CURLSSH_AUTH_AGENT` y `CURLSSLOPT_NO_REVOKE`.
7.0.0 | Se ha eliminado el soporte para inhabilitar la opción `CURLOPT_SAFE_UPLOAD`. Todas las subidas de ficheros de curl deben emplear CURLFile.
5.6.0 | `CURLOPT_SAFE_UPLOAD` ahore es `true` de forma predeterminada.
5.6.0 | Se eliminó `CURLOPT_CLOSEPOLICY` y sus valores asociados.
5.5.0 | Se añadió el recurso cURL como el primer parámetro de la llamada de retorno `CURLOPT_PROGRESSFUNCTION`.
5.5.0 | Se introdujo `CURLOPT_SHARE`.
5.3.0 | Se introdujo `CURLOPT_PROGRESSFUNCTION`.
5.2.10 | Se introdujo `CURLOPT_PROTOCOLS`, y `CURLOPT_REDIR_PROTOCOLS`.
5.2.4 | Se introdujo `CURLOPT_PRIVATE`.
5.1.0 | Se introdujo `CURLOPT_AUTOREFERER`, `CURLOPT_BINARYTRANSFER`, `CURLOPT_FTPSSLAUTH`, `CURLOPT_PROXYAUTH`, y `CURLOPT_TIMECONDITION`.
5.0.0 | Se introdujo `CURLOPT_FTP_USE_EPRT`, `CURLOPT_NOSIGNAL`, `CURLOPT_UNRESTRICTED_AUTH`, `CURLOPT_BUFFERSIZE`, `CURLOPT_HTTPAUTH`, `CURLOPT_PROXYPORT`, `CURLOPT_PROXYTYPE`, `CURLOPT_SSLCERTTYPE`, y `CURLOPT_HTTP200ALIASES`.

### Ejemplos

Ejemplo #1 Inicializar una nueva sesión de cURL y obtener una página web

`<?php
// Crear un nuevo recurso cURL
$ch = curl_init();
// Configurar URL y otras opciones apropiadas
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, false);
// Capturar la URL y pasarla al navegador
curl_exec($ch);
// Cerrar el recurso cURL y liberar recursos del sistema
curl_close($ch);
?>`

Ejemplo #2 Subir un fichero (obsoleto a partir de PHP 5.5.0)

`<?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($ch, CURLOPT_URL, 'http://localhost/upload.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); // requerido a partir de PHP 5.6.0
curl_setopt($ch, CURLOPT_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

> Nota:

> 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

- curl_setopt_array() - Configura múltiples opciones para una transferencia cURL