| name | curl-8-19-0 |
| description | CLI tool and C library for multi-protocol data transfers supporting HTTP/HTTPS, FTP, SFTP, and 30+ protocols. Covers command-line usage, authentication, proxies, SSL/TLS, and WebSocket support. Use when making HTTP requests from the terminal, writing scripts that download/upload data, building C applications with libcurl, or working with curl's supported protocols. |
| license | MIT |
| author | Tangled <noreply@tangledgroup.com> |
| version | 0.1.0 |
| tags | ["HTTP client","FTP","URL transfer","libcurl","CLI tool","HTTPS","SSL/TLS","WebSocket","multi-protocol"] |
| category | networking |
| external_references | ["https://github.com/curl/curl/tree/curl-8_19_0/docs","https://curl.se/","https://curl.se/libcurl/","https://github.com/curl/curl"] |
curl 8.19.0
Overview
curl is a command-line tool and library (libcurl) for transferring data with URLs. It supports over 30 protocols including HTTP, HTTPS, FTP, FTPS, SFTP, SCP, IMAP, SMTP, POP3, LDAP, MQTT, RTMP, SMB, TELNET, TFTP, DICT, GOPHER, and FILE. libcurl provides a C API with easy, multi, share, URL, MIME, header, and WebSocket interfaces used by applications across 101 operating systems and 28 CPU architectures.
curl handles persistent connections, SOCKS proxies, HTTP/2 multiplexing, HTTP/3 (QUIC), TLS with multiple backends (OpenSSL, GnuTLS, wolfSSL, mbedTLS, rustls, Schannel, Secure Transport), authentication methods (Basic, Digest, NTLM, Negotiate/SPNEGO, Kerberos), cookie jars, content encoding (gzip, deflate, brotli, zstd), and much more.
When to Use
- Making HTTP(S) GET/POST/PUT/DELETE requests from the command line
- Downloading or uploading files via HTTP, FTP, SFTP, SCP, SMB
- Scripting data transfers with URL globbing, parallel downloads, and config files
- Building C applications that need network transfer capabilities via libcurl
- Working with mail protocols (IMAP, SMTP, POP3) from the command line or C code
- Implementing WebSocket communication in C applications
- Performing multi-protocol transfers with authentication, proxies, and TLS
- Parsing and manipulating URLs programmatically with the libcurl URL API
Core Concepts
URL syntax: curl follows "RFC 3986 plus" — grounded in RFC 3986 with pragmatic deviations for real-world URLs. Supports scheme-less URLs (guesses protocol from hostname prefix), allows one to three slashes after the colon, percent-encodes non-ASCII bytes, and handles spaces in Location: headers by re-encoding to %20.
Globbing: The CLI supports URL ranges [N-M] and lists {one,two,three} for batch transfers. Use -g/--globoff to disable globbing (needed for IPv6 bracket addresses in URLs).
Persistent connections: When multiple URLs share the same host on one command line, curl reuses the TCP connection. This applies across protocols and is automatic — no special option needed.
Protocol guessing: Without an explicit scheme, curl guesses from hostname prefix: ftp. → FTP, dict. → DICT, ldap. → LDAP, imap. → IMAP, smtp. → SMTP, pop3. → POP3, everything else → HTTP.
Installation / Setup
curl is typically pre-installed on Linux and macOS. On Unix, build from source: