Funciones CURL (Client URL Library)
Introducción
PHP soporta libcurl, una librerÃa creada por Danile Stenberg, que permite la conexión y comunicación con varios tipos de servidores diferentes y con muchos tipos de protocolos diferentes. Actualmente, libcurl soporta los portocolos http, https, ftp, gopher, telnet, dict, file y ldap. Además libcurl también soporta certificados HTTPS, métodos HTTP POST y HTTP PUT, envÃo por FTP (que también puede realizarse con la extensión ftp de PHP), envÃo mediante HTTP de archivos en formularios HTML, servidores proxy, cookies y autenticación usuario+contraseña.
Estas funciones fueron agregadas en la versión 4.0.2.
Requisitos
Para poder usar las funciones CURL deberá instalar el paquete » CURL. PHP requiere que use CURL 7.0.2-beta o superior. Desde la versión 4.2.3 de PHP se necesita, al menos, CURL 7.9.0 o superior. A partir de la versión 4.3.0, se necesita una versión de CURL 7.9.8 o superior. A partir de la versión PHP 5.0.0, la versión de CURL necesaria debe ser superior a 7.10.5.
Instalación
Para poder usar estas funciones, se debe compilar PHP añadiendo el parámetro --with-curl[=DIR], donde DIR apunta al directorio que contiene los directorios lib y include de la librerÃa. En el directorio include, debe existir una carpeta llamada "curl" y que contiene los archivos easy.h y curl.h. Además, debe existir un archivo llamado libcurl.a en el directorio "lib". A partir de la versión de PHP 4.3.0 se puede configurar que PHP haga uso de CURL para el manejo de las conexiones con URLs, mediante la opción --with-curlwrappers.
Note: Nota para los usuarios de plataformas Windows Para activar este módulo en entornos Windows, se deben copiar los archivos libeay32.dll y ssleay32.dll que se encuentran en la carpeta DLL del directorio PHP/Win32 a la carpeta SYSTEM de Windows, que normalmente se encuentra en C:\WINNT\SYSTEM32 o C:\WINDOWS\SYSTEM.
Constantes predefinidas
Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución.
- CURLOPT_AUTOREFERER (integer)
- Disponible desde PHP 5.1.0
- CURLOPT_COOKIESESSION (integer)
- Disponible desde PHP 5.1.0
- CURLOPT_DNS_USE_GLOBAL_CACHE (integer)
- CURLOPT_DNS_CACHE_TIMEOUT (integer)
- CURLOPT_FTPSSLAUTH (integer)
- Disponible desde PHP 5.1.0
- CURLOPT_PORT (integer)
- CURLOPT_FILE (integer)
- CURLOPT_INFILE (integer)
- CURLOPT_INFILESIZE (integer)
- CURLOPT_URL (integer)
- CURLOPT_PROXY (integer)
- CURLOPT_VERBOSE (integer)
- CURLOPT_HEADER (integer)
- CURLOPT_HTTPHEADER (integer)
- CURLOPT_NOPROGRESS (integer)
- CURLOPT_NOBODY (integer)
- CURLOPT_FAILONERROR (integer)
- CURLOPT_UPLOAD (integer)
- CURLOPT_POST (integer)
- CURLOPT_FTPLISTONLY (integer)
- CURLOPT_FTPAPPEND (integer)
- CURLOPT_NETRC (integer)
- CURLOPT_FOLLOWLOCATION (integer)
- CURLOPT_FTPASCII (integer)
- CURLOPT_PUT (integer)
- CURLOPT_MUTE (integer)
- CURLOPT_USERPWD (integer)
- CURLOPT_PROXYUSERPWD (integer)
- CURLOPT_RANGE (integer)
- CURLOPT_TIMEOUT (integer)
- CURLOPT_POSTFIELDS (integer)
- CURLOPT_REFERER (integer)
- CURLOPT_USERAGENT (integer)
- CURLOPT_FTPPORT (integer)
- CURLOPT_FTP_USE_EPSV (integer)
- CURLOPT_LOW_SPEED_LIMIT (integer)
- CURLOPT_LOW_SPEED_TIME (integer)
- CURLOPT_RESUME_FROM (integer)
- CURLOPT_COOKIE (integer)
- CURLOPT_SSLCERT (integer)
- CURLOPT_SSLCERTPASSWD (integer)
- CURLOPT_WRITEHEADER (integer)
- CURLOPT_SSL_VERIFYHOST (integer)
- CURLOPT_COOKIEFILE (integer)
- CURLOPT_SSLVERSION (integer)
- CURLOPT_TIMECONDITION (integer)
- CURLOPT_TIMEVALUE (integer)
- CURLOPT_CUSTOMREQUEST (integer)
- CURLOPT_STDERR (integer)
- CURLOPT_TRANSFERTEXT (integer)
- CURLOPT_RETURNTRANSFER (integer)
- CURLOPT_QUOTE (integer)
- CURLOPT_POSTQUOTE (integer)
- CURLOPT_INTERFACE (integer)
- CURLOPT_KRB4LEVEL (integer)
- CURLOPT_HTTPPROXYTUNNEL (integer)
- CURLOPT_FILETIME (integer)
- CURLOPT_WRITEFUNCTION (integer)
- CURLOPT_READFUNCTION (integer)
- CURLOPT_PASSWDFUNCTION (integer)
- CURLOPT_HEADERFUNCTION (integer)
- CURLOPT_MAXREDIRS (integer)
- CURLOPT_MAXCONNECTS (integer)
- CURLOPT_CLOSEPOLICY (integer)
- CURLOPT_FRESH_CONNECT (integer)
- CURLOPT_FORBID_REUSE (integer)
- CURLOPT_RANDOM_FILE (integer)
- CURLOPT_EGDSOCKET (integer)
- CURLOPT_CONNECTTIMEOUT (integer)
- CURLOPT_SSL_VERIFYPEER (integer)
- CURLOPT_CAINFO (integer)
- CURLOPT_CAPATH (integer)
- CURLOPT_COOKIEJAR (integer)
- CURLOPT_SSL_CIPHER_LIST (integer)
- CURLOPT_BINARYTRANSFER (integer)
- CURLOPT_NOSIGNAL (integer)
- CURLOPT_PROXYTYPE (integer)
- CURLOPT_BUFFERSIZE (integer)
- CURLOPT_HTTPGET (integer)
- CURLOPT_HTTP_VERSION (integer)
- CURLOPT_SSLKEY (integer)
- CURLOPT_SSLKEYTYPE (integer)
- CURLOPT_SSLKEYPASSWD (integer)
- CURLOPT_SSLENGINE (integer)
- CURLOPT_SSLENGINE_DEFAULT (integer)
- CURLOPT_SSLCERTTYPE (integer)
- CURLOPT_CRLF (integer)
- CURLOPT_ENCODING (integer)
- CURLOPT_PROXYPORT (integer)
- CURLOPT_UNRESTRICTED_AUTH (integer)
- CURLOPT_FTP_USE_EPRT (integer)
- CURLOPT_HTTP200ALIASES (integer)
- CURLOPT_HTTPAUTH (integer)
- CURLAUTH_BASIC (integer)
- CURLAUTH_DIGEST (integer)
- CURLAUTH_GSSNEGOTIATE (integer)
- CURLAUTH_NTLM (integer)
- CURLAUTH_ANY (integer)
- CURLAUTH_ANYSAFE (integer)
- CURLOPT_PROXYAUTH (integer)
- CURLCLOSEPOLICY_LEAST_RECENTLY_USED (integer)
- CURLCLOSEPOLICY_LEAST_TRAFFIC (integer)
- CURLCLOSEPOLICY_SLOWEST (integer)
- CURLCLOSEPOLICY_CALLBACK (integer)
- CURLCLOSEPOLICY_OLDEST (integer)
- CURLINFO_EFFECTIVE_URL (integer)
- CURLINFO_HTTP_CODE (integer)
- CURLINFO_HEADER_SIZE (integer)
- CURLINFO_REQUEST_SIZE (integer)
- CURLINFO_TOTAL_TIME (integer)
- CURLINFO_NAMELOOKUP_TIME (integer)
- CURLINFO_CONNECT_TIME (integer)
- CURLINFO_PRETRANSFER_TIME (integer)
- CURLINFO_SIZE_UPLOAD (integer)
- CURLINFO_SIZE_DOWNLOAD (integer)
- CURLINFO_SPEED_DOWNLOAD (integer)
- CURLINFO_SPEED_UPLOAD (integer)
- CURLINFO_FILETIME (integer)
- CURLINFO_SSL_VERIFYRESULT (integer)
- CURLINFO_CONTENT_LENGTH_DOWNLOAD (integer)
- CURLINFO_CONTENT_LENGTH_UPLOAD (integer)
- CURLINFO_STARTTRANSFER_TIME (integer)
- CURLINFO_CONTENT_TYPE (integer)
- CURLINFO_REDIRECT_TIME (integer)
- CURLINFO_REDIRECT_COUNT (integer)
- CURL_VERSION_IPV6 (integer)
- CURL_VERSION_KERBEROS4 (integer)
- CURL_VERSION_SSL (integer)
- CURL_VERSION_LIBZ (integer)
- CURLVERSION_NOW (integer)
- CURLE_OK (integer)
- CURLE_UNSUPPORTED_PROTOCOL (integer)
- CURLE_FAILED_INIT (integer)
- CURLE_URL_MALFORMAT (integer)
- CURLE_URL_MALFORMAT_USER (integer)
- CURLE_COULDNT_RESOLVE_PROXY (integer)
- CURLE_COULDNT_RESOLVE_HOST (integer)
- CURLE_COULDNT_CONNECT (integer)
- CURLE_FTP_WEIRD_SERVER_REPLY (integer)
- CURLE_FTP_ACCESS_DENIED (integer)
- CURLE_FTP_USER_PASSWORD_INCORRECT (integer)
- CURLE_FTP_WEIRD_PASS_REPLY (integer)
- CURLE_FTP_WEIRD_USER_REPLY (integer)
- CURLE_FTP_WEIRD_PASV_REPLY (integer)
- CURLE_FTP_WEIRD_227_FORMAT (integer)
- CURLE_FTP_CANT_GET_HOST (integer)
- CURLE_FTP_CANT_RECONNECT (integer)
- CURLE_FTP_COULDNT_SET_BINARY (integer)
- CURLE_PARTIAL_FILE (integer)
- CURLE_FTP_COULDNT_RETR_FILE (integer)
- CURLE_FTP_WRITE_ERROR (integer)
- CURLE_FTP_QUOTE_ERROR (integer)
- CURLE_HTTP_NOT_FOUND (integer)
- CURLE_WRITE_ERROR (integer)
- CURLE_MALFORMAT_USER (integer)
- CURLE_FTP_COULDNT_STOR_FILE (integer)
- CURLE_READ_ERROR (integer)
- CURLE_OUT_OF_MEMORY (integer)
- CURLE_OPERATION_TIMEOUTED (integer)
- CURLE_FTP_COULDNT_SET_ASCII (integer)
- CURLE_FTP_PORT_FAILED (integer)
- CURLE_FTP_COULDNT_USE_REST (integer)
- CURLE_FTP_COULDNT_GET_SIZE (integer)
- CURLE_HTTP_RANGE_ERROR (integer)
- CURLE_HTTP_POST_ERROR (integer)
- CURLE_SSL_CONNECT_ERROR (integer)
- CURLE_FTP_BAD_DOWNLOAD_RESUME (integer)
- CURLE_FILE_COULDNT_READ_FILE (integer)
- CURLE_LDAP_CANNOT_BIND (integer)
- CURLE_LDAP_SEARCH_FAILED (integer)
- CURLE_LIBRARY_NOT_FOUND (integer)
- CURLE_FUNCTION_NOT_FOUND (integer)
- CURLE_ABORTED_BY_CALLBACK (integer)
- CURLE_BAD_FUNCTION_ARGUMENT (integer)
- CURLE_BAD_CALLING_ORDER (integer)
- CURLE_HTTP_PORT_FAILED (integer)
- CURLE_BAD_PASSWORD_ENTERED (integer)
- CURLE_TOO_MANY_REDIRECTS (integer)
- CURLE_UNKNOWN_TELNET_OPTION (integer)
- CURLE_TELNET_OPTION_SYNTAX (integer)
- CURLE_OBSOLETE (integer)
- CURLE_SSL_PEER_CERTIFICATE (integer)
- CURLE_GOT_NOTHING (integer)
- CURLE_SSL_ENGINE_NOTFOUND (integer)
- CURLE_SSL_ENGINE_SETFAILED (integer)
- CURLE_SEND_ERROR (integer)
- CURLE_RECV_ERROR (integer)
- CURLE_SHARE_IN_USE (integer)
- CURLE_SSL_CERTPROBLEM (integer)
- CURLE_SSL_CIPHER (integer)
- CURLE_SSL_CACERT (integer)
- CURLE_BAD_CONTENT_ENCODING (integer)
- CURLE_LDAP_INVALID_URL (integer)
- CURLE_FILESIZE_EXCEEDED (integer)
- CURLE_FTP_SSL_FAILED (integer)
- CURLFTPAUTH_DEFAULT (integer)
- Disponible desde PHP 5.1.0
- CURLFTPAUTH_SSL (integer)
- Disponible desde PHP 5.1.0
- CURLFTPAUTH_TLS (integer)
- Disponible desde PHP 5.1.0
- CURLPROXY_HTTP (integer)
- CURLPROXY_SOCKS5 (integer)
- CURL_NETRC_OPTIONAL (integer)
- CURL_NETRC_IGNORED (integer)
- CURL_NETRC_REQUIRED (integer)
- CURL_HTTP_VERSION_NONE (integer)
- CURL_HTTP_VERSION_1_0 (integer)
- CURL_HTTP_VERSION_1_1 (integer)
- CURLM_CALL_MULTI_PERFORM (integer)
- CURLM_OK (integer)
- CURLM_BAD_HANDLE (integer)
- CURLM_BAD_EASY_HANDLE (integer)
- CURLM_OUT_OF_MEMORY (integer)
- CURLM_INTERNAL_ERROR (integer)
- CURLMSG_DONE (integer)
Ejemplos
Una vez que se ha compilado PHP con soporte para CURL, se pueden utilizar las funciones CURL. La idea básica tras las funciones CURL es que se inicializa una sesión CURL usando la función curl_init(), luego se establecen las opciones para la transferencia a través de la función curl_setopt(), y finalmente se ejecuta la sesión con la función curl_exec() para luego cerrarla con curl_close(). Aqui hay un ejemplo que usa funciones CURL para traer el contenido de la página de inicio de www.example.com y guardarlo en un archivo:
Example#1 Usando el modulo CURL de PHP para traer la página de inicio de www.example.com
<?php
$ch = curl_init ("https://www.example.com/");
$fp = fopen ("pagina_de_inicio.txt", "w");
curl_setopt ($ch, CURLOPT_FILE, $fp);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
fclose ($fp);
?>
Table of Contents
- curl_close — Cierra una sesión CURL
- curl_copy_handle — Copia un recurso CURL y todas sus opciones asociadas
- curl_errno — Devuelve el último número de error
- curl_error — Devuelve una cadena conteniendo el último error para la sesión actual.
- curl_exec — Ejecuta una sesión CURL
- curl_getinfo — Obtiene información relativa a una transferencia especÃfica
- curl_init — Inicializa una sesión CURL
- curl_multi_add_handle — Añade un recurso de tipo CURL a un grupo de recursos CURL
- curl_multi_close — Cierra un grupo de recursos CURL
- curl_multi_exec — Ejecuta la subconexiones del manejador CURL actual
- curl_multi_getcontent — Devuelve el contenido de un recurso CURL si la opción CURLOPT_RETURNTRANSFER está activada
- curl_multi_info_read — Obtiene información sobre las transferencias actuales
- curl_multi_init — Crea un nuevo grupo de recursos CURL
- curl_multi_remove_handle — Elimina un recurso de tipo CURL de un grupo de recursos CURL
- curl_multi_select — Obtiene todos los sockets asociados a la extensión CURL, que después pueden ser seleccionados.
- curl_setopt_array — Set multiple options for a cURL transfer
- curl_setopt — Asigna un valor a una opción de una sesión CURL
- curl_version — Devuelve la versión actual de CURL