curl is a command line tool for transferring files with URL syntax, supporting FTP, FTPS, TFTP, HTTP, HTTPS, TELNET, DICT, FILE and LDAP.
curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user password authentication (Basic, Digest, NTLM, Negotiate, kerberos...), file transfer resume, proxy tunneling and a busload of other useful tricks.
Curl is open source and free software that compiles and runs under a wide variety of operating systems.
Here are some key features of "cURL":
curl tool:
· config file support
· multiple URLs in a single command line
· range "globbing" support: [0-13], {one,two,three}
· multiple file upload on a single command line
· custom maximum transfer rate
· redirectable stderr
libcurl supports:
· full URL syntax with no length limit
· custom maximum download time
· custom least download speed acceptable
· custom output result after completion
· guesses protocol from host name unless specified
· uses .netrc
· progress bar/time specs while downloading
· "standard" proxy environment variables support
· compiles on win32 (reported builds on 40 operating systems)
· selectable network interface for outgoing traffic
· IPv6 support on unix and Windows
· persistant connections
· socks5 support
· supports user name password in proxy environment variables
· operations through proxy "tunnel" (using CONNECT)
· supports large files (>2GB and >4GB) both upload/download
· replacable memory functions (malloc, free, realloc, etc)
· asynchronous name resolving (*6)
· both a push and a pull style interface
HTTP:
· HTTP/1.1 compliant (optionally uses 1.0)
· GET
· PUT
· HEAD
· POST
· Pipelining
· multipart formpost (RFC1867-style)
· authentication: Basic, Digest, NTLM, GSS-Negotiate/Negotiate and SPNEGO to server and proxy
· resume (both GET and PUT)
· follow redirects
· maximum amount of redirects to follow
· custom HTTP request
· cookie get/send fully parsed
· reads/writes the netscape cookie file format
· custom headers (replace/remove internally generated headers)
· custom user-agent string
· custom referer string
· range
· proxy authentication
· time conditions
· via http-proxy
· retrieve file modification date
· Content-Encoding support for deflate and gzip
· "Transfer-Encoding: chunked" support for "uploads"
HTTPS:
· (all the HTTP features)
· using client certificates
· verify server certificate
· via http-proxy
· select desired encryption
· force usage of a specific SSL version (SSLv2, SSLv3 or TLSv1)
FTP:
· download
· authentication
· kerberos4, kerberos5
· active/passive using PORT, EPRT, PASV or EPSV
· single file size information (compare to HTTP HEAD)
· 'type=' URL support
· dir listing
· dir listing names-only
· upload
· upload append
· upload via http-proxy as HTTP PUT
· download resume
· upload resume
· custom ftp commands (before and/or after the transfer)
· simple "range" support
· via http-proxy
· all operations can be tunneled through a http-proxy
· customizable to retrieve file modification date
· no dir depth limit
FTPS:
· implicit ftps:// support that use SSL on both connections
· explicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp:// connection to use SSL for both or one of the connections
SCP:
· both password and public key auth
SFTP:
· both password and public key auth
· with custom commands sent before/after the transfer
TFTP:
· download / upload
TELNET:
· connection negotiation
· custom telnet options
· stdin/stdout I/O
LDAP:
· full LDAP URL support
DICT:
· extended DICT URL support
FILE:
· URL support
· "uploads"
· resume
What's New in This Release: [ read full changelog ]
Changes:
· -T. is now for non-blocking uploading from stdin
· SYST handling on FTP for OS/400 FTP server cases
· libcurl refuses to read a single HTTP header longer than 100K
· added the --crlfile option to curl
Bugfixes:
· The windows makefiles work again
· libcurl-NSS acknowledges verifyhost
· SIGSEGV when pipelined pipe unexpectedly breaks
· data corruption issue with re-connected transfers
· use after free if we're completed but easy_conn not NULL (pipelined)
· missing strdup() return code check
· CURLOPT_PROXY_TRANSFER_MODE could pass along wrong syntax
· configure --with-gnutls=PATH fixed
· ftp response reader bug on failed control connections
· improved NSS error message on failed host name verifications
· ftp NOBODY on re-used connection hang
· configure uses pkg-config for cross-compiles as well
· improved NSS detection in configure
· cookie expiry date at 1970-jan-1 00:00:00
· libcurl-OpenSSL failed to verify some certs with Subject Alternative Name
· libcurl-OpenSSL can load CRL files with more than one certificate inside
· received cookies without explicit path got saved wrong if the URL had a query part
· don't shrink SO_SNDBUF on windows for those who have it set large already
· connect next bug
· invalid file name characters handling on Windows
· double close() on the primary socket with libcurl-NSS
· GSS negotiate infinite loop on bad credentials
· memory leak in SCP/SFTP connections
· use pkg-config to find out libssh2 installation details in configure
· unparsable cookie expire dates make cookies get treated as session coookies
· POST with Digest authentication and "Transfer-Encoding: chunked"
· SCP connection re-use with wrong auth
· CURLINFO_CONTENT_LENGTH_DOWNLOAD for 0 bytes transfers
· CURLINFO_SIZE_DOWNLOAD for ldap transfers (-w size_download)