mirror of
https://github.com/curl/curl.git
synced 2024-12-09 06:30:06 +08:00
265b14d6b3
Warning: this will make existing curl command lines that use metalink to stop working. Reasons for removal: 1. We've found several security problems and issues involving the metalink support in curl. The issues are not detailed here. When working on those, it become apparent to the team that several of the problems are due to the system design, metalink library API and what the metalink RFC says. They are very hard to fix on the curl side only. 2. The metalink usage with curl was only very briefly documented and was not following the "normal" curl usage pattern in several ways, making it surprising and non-intuitive which could lead to further security issues. 3. The metalink library was last updated 6 years ago and wasn't so active the years before that either. An unmaintained library means there's a security problem waiting to happen. This is probably reason enough. 4. Metalink requires an XML parsing library, which is complex code (even the smaller alternatives) and to this day often gets security updates. 5. Metalink is not a widely used curl feature. In the 2020 curl user survey, only 1.4% of the responders said that they'd are using it. In 2021 that number was 1.2%. Searching the web also show very few traces of it being used, even with other tools. 6. The torrent format and associated technology clearly won for downloading large files from multiple sources in parallel. Cloes #7176
201 lines
8.2 KiB
Plaintext
201 lines
8.2 KiB
Plaintext
.\" **************************************************************************
|
|
.\" * _ _ ____ _
|
|
.\" * Project ___| | | | _ \| |
|
|
.\" * / __| | | | |_) | |
|
|
.\" * | (__| |_| | _ <| |___
|
|
.\" * \___|\___/|_| \_\_____|
|
|
.\" *
|
|
.\" * Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
|
|
.\" *
|
|
.\" * This software is licensed as described in the file COPYING, which
|
|
.\" * you should have received as part of this distribution. The terms
|
|
.\" * are also available at https://curl.se/docs/copyright.html.
|
|
.\" *
|
|
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
.\" * copies of the Software, and permit persons to whom the Software is
|
|
.\" * furnished to do so, under the terms of the COPYING file.
|
|
.\" *
|
|
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
.\" * KIND, either express or implied.
|
|
.\" *
|
|
.\" **************************************************************************
|
|
.\"
|
|
.\" DO NOT EDIT. Generated by the curl project gen.pl man page generator.
|
|
.\"
|
|
.TH curl 1 "16 Dec 2016" "Curl 7.52.0" "Curl Manual"
|
|
.SH NAME
|
|
curl \- transfer a URL
|
|
.SH SYNOPSIS
|
|
.B curl [options / URLs]
|
|
.SH DESCRIPTION
|
|
.B curl
|
|
is a tool to transfer data from or to a server, using one of the supported
|
|
protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP,
|
|
LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP,
|
|
SMTPS, TELNET and TFTP). The command is designed to work without user
|
|
interaction.
|
|
|
|
curl offers a busload of useful tricks like proxy support, user
|
|
authentication, FTP upload, HTTP post, SSL connections, cookies, file transfer
|
|
resume and more. As you will see below, the number of features will make your
|
|
head spin!
|
|
|
|
curl is powered by libcurl for all transfer-related features. See
|
|
*libcurl(3)* for details.
|
|
.SH URL
|
|
The URL syntax is protocol-dependent. You'll find a detailed description in
|
|
RFC 3986.
|
|
|
|
You can specify multiple URLs or parts of URLs by writing part sets within
|
|
braces and quoting the URL as in:
|
|
|
|
"http://site.{one,two,three}.com"
|
|
|
|
or you can get sequences of alphanumeric series by using [] as in:
|
|
|
|
"ftp://ftp.example.com/file[1-100].txt"
|
|
|
|
"ftp://ftp.example.com/file[001-100].txt" (with leading zeros)
|
|
|
|
"ftp://ftp.example.com/file[a-z].txt"
|
|
|
|
Nested sequences are not supported, but you can use several ones next to each
|
|
other:
|
|
|
|
"http://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html"
|
|
|
|
You can specify any amount of URLs on the command line. They will be fetched
|
|
in a sequential manner in the specified order. You can specify command line
|
|
options and URLs mixed and in any order on the command line.
|
|
|
|
You can specify a step counter for the ranges to get every Nth number or
|
|
letter:
|
|
|
|
"http://example.com/file[1-100:10].txt"
|
|
|
|
"http://example.com/file[a-z:2].txt"
|
|
|
|
When using [] or {} sequences when invoked from a command line prompt, you
|
|
probably have to put the full URL within double quotes to avoid the shell from
|
|
interfering with it. This also goes for other characters treated special, like
|
|
for example '&', '?' and '*'.
|
|
|
|
Provide the IPv6 zone index in the URL with an escaped percentage sign and the
|
|
interface name. Like in
|
|
|
|
"http://[fe80::3%25eth0]/"
|
|
|
|
If you specify URL without protocol:// prefix, curl will attempt to guess what
|
|
protocol you might want. It will then default to HTTP but try other protocols
|
|
based on often-used host name prefixes. For example, for host names starting
|
|
with "ftp." curl will assume you want to speak FTP.
|
|
|
|
curl will do its best to use what you pass to it as a URL. It is not trying to
|
|
validate it as a syntactically correct URL by any means but is instead
|
|
**very** liberal with what it accepts.
|
|
|
|
curl will attempt to re-use connections for multiple file transfers, so that
|
|
getting many files from the same server will not do multiple connects /
|
|
handshakes. This improves speed. Of course this is only done on files
|
|
specified on a single command line and cannot be used between separate curl
|
|
invokes.
|
|
.SH OUTPUT
|
|
If not told otherwise, curl writes the received data to stdout. It can be
|
|
instructed to instead save that data into a local file, using the --output or
|
|
--remote-name options. If curl is given multiple URLs to transfer on the
|
|
command line, it similarly needs multiple options for where to save them.
|
|
|
|
curl does not parse or otherwise "understand" the content it gets or writes as
|
|
output. It does no encoding or decoding, unless explicitly asked so with
|
|
dedicated command line options.
|
|
.SH PROTOCOLS
|
|
curl supports numerous protocols, or put in URL terms: schemes. Your
|
|
particular build may not support them all.
|
|
.IP DICT
|
|
Lets you lookup words using online dictionaries.
|
|
.IP FILE
|
|
Read or write local files. curl does not support accessing file:// URL
|
|
remotely, but when running on Microsoft Windows using the native UNC approach
|
|
will work.
|
|
.IP FTP(S)
|
|
curl supports the File Transfer Protocol with a lot of tweaks and levers. With
|
|
or without using TLS.
|
|
.IP GOPHER
|
|
Retrieve files.
|
|
.IP HTTP(S)
|
|
curl supports HTTP with numerous options and variations. It can speak HTTP
|
|
version 0.9, 1.0, 1.1, 2 and 3 depending on build options and the correct
|
|
command line options.
|
|
.IP IMAP(S)
|
|
Using the mail reading protocol, curl can "download" emails for you. With or
|
|
without using TLS.
|
|
.IP LDAP(S)
|
|
curl can do directory lookups for you, with or without TLS.
|
|
.IP MQTT
|
|
curl supports MQTT version 3. Downloading over MQTT equals "subscribe" to a
|
|
topic while uploading/posting equals "publish" on a topic. MQTT support is
|
|
experimental and TLS based MQTT is not supported (yet).
|
|
.IP POP3(S)
|
|
Downloading from a pop3 server means getting a mail. With or without using
|
|
TLS.
|
|
.IP RTMP(S)
|
|
The Realtime Messaging Protocol is primarily used to server streaming media
|
|
and curl can download it.
|
|
.IP RTSP
|
|
curl supports RTSP 1.0 downloads.
|
|
.IP SCP
|
|
curl supports SSH version 2 scp transfers.
|
|
.IP SFTP
|
|
curl supports SFTP (draft 5) done over SSH version 2.
|
|
.IP SMB(S)
|
|
curl supports SMB version 1 for upload and download.
|
|
.IP SMTP(S)
|
|
Uploading contents to an SMTP server means sending an email. With or without
|
|
TLS.
|
|
.IP TELNET
|
|
Telling curl to fetch a telnet URL starts an interactive session where it
|
|
sends what it reads on stdin and outputs what the server sends it.
|
|
.IP TFTP
|
|
curl can do TFTP downloads and uploads.
|
|
.SH "PROGRESS METER"
|
|
curl normally displays a progress meter during operations, indicating the
|
|
amount of transferred data, transfer speeds and estimated time left, etc. The
|
|
progress meter displays number of bytes and the speeds are in bytes per
|
|
second. The suffixes (k, M, G, T, P) are 1024 based. For example 1k is 1024
|
|
bytes. 1M is 1048576 bytes.
|
|
|
|
curl displays this data to the terminal by default, so if you invoke curl to
|
|
do an operation and it is about to write data to the terminal, it
|
|
*disables* the progress meter as otherwise it would mess up the output
|
|
mixing progress meter and response data.
|
|
|
|
If you want a progress meter for HTTP POST or PUT requests, you need to
|
|
redirect the response output to a file, using shell redirect (>), --output or
|
|
similar.
|
|
|
|
It is not the same case for FTP upload as that operation does not spit out
|
|
any response data to the terminal.
|
|
|
|
If you prefer a progress "bar" instead of the regular meter, --progress-bar is
|
|
your friend. You can also disable the progress meter completely with the
|
|
--silent option.
|
|
.SH OPTIONS
|
|
Options start with one or two dashes. Many of the options require an
|
|
additional value next to them.
|
|
|
|
The short "single-dash" form of the options, -d for example, may be used with
|
|
or without a space between it and its value, although a space is a recommended
|
|
separator. The long "double-dash" form, --data for example, requires a space
|
|
between it and its value.
|
|
|
|
Short version options that don't need any additional values can be used
|
|
immediately next to each other, like for example you can specify all the
|
|
options -O, -L and -v at once as -OLv.
|
|
|
|
In general, all boolean options are enabled with --**option** and yet again
|
|
disabled with --**no-**option. That is, you use the exact same option name
|
|
but prefix it with "no-". However, in this list we mostly only list and show
|
|
the --option version of them. (This concept with --no options was added in
|
|
7.19.0. Previously most options were toggled on/off on repeated use of the
|
|
same command line option.)
|