Top Qs
Timeline
Chat
Perspective

CURL

Free URL data transfer client software From Wikipedia, the free encyclopedia

Remove ads

cURL (pronounced like "curl",[7] /kɜːrl/) is a free and open source CLI app for uploading and downloading individual files. It can download a URL from a web server over HTTP, and supports a variety of other network protocols, URI schemes, multiple versions of HTTP, and proxying. The project consists of a library (libcurl) and command-line tool (curl), which have been widely ported to different computing platforms.

Quick facts Original author, Developer ...

It was created by Daniel Stenberg, who is still the lead developer of the project.

Remove ads

History

The software was first released in 1996,[8] originally named httpget and then became urlget, before adopting the current name of curl.[9][10] The name stands for "Client for URL".[11] The original author and lead developer is the Swedish developer Daniel Stenberg, who created curl to power part of an IRC bot, because he wanted to automatically provide currency exchange rates, fetched from a website, to users in an IRC chat room.[2]

Remove ads

Components

Summarize
Perspective

libcurl

libcurl is a client-side URL transfer library that powers curl.[12] It supports numerous internet protocols including DICT, FTP, FTPS, Gopher, HTTP (versions 1.x[13]) with HTTP/2 and HTTP/3 support (including h2c, prior-knowledge, dual-connect modes, and QUIC with 0-RTT handshakes), as well as HTTPS, IMAP, LDAPS, MQTT, POP3, RTSP, RTMP, SCP, SFTP, SMTP, SMB, Telnet, and TFTP. It also implements the file URI scheme.

The library provides features such as cookie handling, standard HTTP request methods (GET, POST, PUT, HEAD, multipart form uploads), and authentication mechanisms including Basic, Digest, NTLM, Negotiate, CRAM-MD5, SCRAM-SHA, Kerberos, Bearer tokens, AWS Sigv4, SASL, and reading credentials from .netrc.

libcurl supports a variety of security and transport features, including TLS 1.0-1.3, mutual authentication, STARTTLS, OCSP stapling, Encrypted Client Hello (ECH), False Start, key pinning, post-quantum readiness, session resumption, early data, session import/export, HSTS, Alt-Svc, Public Suffix List (PSL), entity tags (ETags), range requests, transfer compression (gzip, Brotli, zstd), custom headers, custom methods, and redirect following.

It also offers proxy and networking support, including SOCKS4, SOCKS5, HAProxy, and HTTP proxies with chaining and Unix domain sockets, as well as user-plus-password authentication[14]. Advanced name-resolution features include DNS-over-HTTPS, custom DNS servers, host/port mappings, and DNS caching.

Additional functionality includes file transfer resume, FTP uploading, form-based HTTP upload, HTTPS certificates, and mechanisms for controlling and monitoring transfers such as configurable timeouts, automatic retries, rate limiting, and detection of stalled connections. The library also provides enhanced reporting features, including JSON-formatted metadata, content-disposition handling, IDN hostname display, and customizable transfer information.

The libcurl library is portable, as it builds and works identically on most platforms, including:[15][16][17]

The libcurl library is thread-safe and IPv6 compatible. Bindings are available for more than 50 languages, including C, C++, Java, Julia (is bundled with), PHP and Python.[19]

The libcurl library supports GnuTLS, mbed TLS, NSS, GSKit on IBM i, SChannel on Windows, Secure Transport on macOS and iOS, SSL/TLS through OpenSSL, BoringSSL, libreSSL, AmiSSL, wolfSSL, BearSSL and rustls.[20]

curl

curl is a command-line tool for getting or sending data, including files, using URL syntax. curl provides an interface to the libcurl library; it supports every protocol libcurl supports.[14]

curl supports HTTPS, and performs SSL or TLS certificate verification by default. When curl connects to a remote server via HTTPS, it will obtain the remote server certificate, then checks against its CA certificate store the validity of the remote server to ensure the remote server is the one it claims to be. Some curl packages are bundled with a CA certificate store file. There are several options to specify a CA certificate, such as --cacert and --capath. The --cacert option can be used to specify the location of the CA certificate store file.

Starting with Windows 10 version 1809, Windows ships with curl.exe.[17] On Microsoft Windows, if a CA certificate file is not specified, curl will look for the curl-ca-bundle.crt file in the following locations, in the order given:[21]

  1. App's folder (where curl.exe is located)
  2. Current working directory
  3. C:\Windows\System32 directory
  4. C:\Windows directory
  5. Directories specified in the PATH environment variable

curl will return an error message if the remote server is using a self-signed certificate, or if the remote server certificate is not signed by a CA listed in the CA cert file. -k or --insecure option can be used to skip certificate verification. Alternatively, if the remote server is trusted, the remote server CA certificate can be added to the CA certificate store file.

tiny-curl

tiny-curl is a lightweight version of libcurl developed by wolfSSL Inc. for embedded and resource-constrained devices. It implements HTTPS functionality in roughly 100 KB of code on typical 32-bit architectures.

Remove ads

Licensing

curl and libcurl are distributed under the MIT License. tiny-curl, a version of curl optimized for embedded systems and supported by wolfSSL, is available under both the GNU GPLv3-or-later and commercial licensing.

Rock-solid curl[22], the long-term support (LTS) edition, uses the same curl license by default, with an option for commercial licensing for organizations that require contractual support or warranty coverage.

See also

  • curl-loader – an open-source testing tool based on curl
  • libwww – an early library that comes with a command line interface
  • PowerShell – the iwr (Invoke-WebRequest) Windows PowerShell had functionality similar to curl; class Web-client too.[23]
  • Web crawler – an internet bot that can crawl the web
  • Wget – similar command-line tool with no associated library but capable of recursive downloading
Remove ads

References

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads