【前言】
本文翻译和整理自 Linux-2.6.32 中和 curl 相关的 Manual Page 描述文档。文档目的仅在提醒读者所遗忘的知识点,故在整理时削弱了阅读流畅性,适用于对 curl 有一定了解的开发人员。
【语法】
curl [options] [URL...]
【概述】
curl 命令用作网络数据包收发,常应用于非交互式环境中。
URL 的格式依赖于命令所使用的网络协议,相关详细信息可以查看《RFC 3986》文档。
如果在一条命令中访问多个文件,crul 会尝试在多个传输会话间重用一个连接,以此减少建立不必要的连接或握手,从而访问速度。
多个相互独立的 curl 命令调用之间不支持连接重用。
curl 运行时,默认启用传输进度条用于显示总传输数据大小、传输速度、预计剩余传输时间等。
进度条数据默认直接输出到控制台。如果不希望这些数据在你 POST 或 PUT 时扰乱了 response数据包,可以使用重定向 > 或后跟参数 -o [file] 或其它同样功能的语句将相应数据重定向到文件中。
使用参数 -# 可以让她看起来更像真正的进度“条”。
【URL技巧】
字符串匹配 http://site.{one,two,three}.com
字符匹配 ftp://ftp.letters.com/file[a-z].txt
数字匹配 ftp://ftp.numerical.com/file[1-100].txt
混合匹配 http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
步进匹配 http://www.numerical.com/file[1-100:10].txt
http://www.letters.com/file[a-z:2].txt
-a/--append 上传文件时,附加到目标文件 -A/--user-agent 设置用户代理发送给服务器 - anyauth 可以使用“任何”身份验证方法 -b/--cookie cookie字符串或文件读取位置 - basic 使用HTTP基本验证 -B/--use -ascii 使用ASCII /文本传输 -c/--cookie-jar 操作结束后把cookie写入到这个文件中 -C/--continue -at 断点续转 -d/--data HTTP POST方式传送数据 --data-ascii 以ascii的方式post数据 --data-binary 以二进制的方式post数据 --negotiate 使用HTTP身份验证 --digest 使用数字身份验证 --disable-eprt 禁止使用EPRT或LPRT --disable-epsv 禁止使用EPSV -D/--dump-header 把header信息写入到该文件中 --egd-file 为随机数据(SSL)设置EGD socket路径 --tcp-nodelay 使用TCP_NODELAY选项 -e/--referer 来源网址 -E/--cert 客户端证书文件和密码 (SSL) --cert-type 证书文件类型 (DER/PEM/ENG) (SSL) --key 私钥文件名 (SSL) --key-type 私钥文件类型 (DER/PEM/ENG) (SSL) --pass 私钥密码 (SSL) --engine 加密引擎使用 (SSL). "--engine list" for list --cacert CA证书 (SSL) --capath CA目录 (made using c_rehash) to verify peer against (SSL) --ciphers SSL密码 --compressed 要求返回是压缩的形势 (using deflate or gzip) --connect-timeout 设置最大请求时间 --create-dirs 建立本地目录的目录层次结构 --crlf 上传是把LF转变成CRLF -f/--fail 连接失败时不显示http错误 --ftp-create-dirs 如果远程目录不存在,创建远程目录 --ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用 --ftp-pasv 使用 PASV/EPSV 代替端口 --ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址 --ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输 --ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输 -F/--form 模拟http表单提交数据 -form-string 模拟http表单提交数据 -g/--globoff 禁用网址序列和范围使用{}和[] -G/--get 以get的方式来发送数据 -h/--help 帮助 -H/--header 自定义头信息传递给服务器 --ignore-content-length 忽略的HTTP头信息的长度 -i/--include 输出时包括protocol头信息 -I/--head 只显示文档信息 从文件中读取-j/--junk-session-cookies忽略会话Cookie - 界面指定网络接口/地址使用 - krb4 <级别>启用与指定的安全级别krb4 -j/--junk-session-cookies 读取文件进忽略session cookie --interface < interface > 使用指定网络接口/地址 --krb4 使用指定安全级别的krb4 -k/--insecure 允许不使用证书到SSL站点 -K/--config 指定的配置文件读取 -l/--list-only 列出ftp目录下的文件名称 --limit-rate 设置传输速度 --local-port 强制使用本地端口号 -m/--max-time 设置最大传输时间 --max-redirs 设置最大读取的目录数 --max-filesize 设置最大下载的文件总量 -M/--manual 显示全手动 -n/--netrc 从netrc文件中读取用户名和密码 --netrc-optional 使用 .netrc 或者 URL来覆盖-n --ntlm 使用 HTTP NTLM 身份验证 -N/--no-buffer 禁用缓冲输出 -o/--output 把输出写到该文件中 -O/--remote-name 把输出写到该文件中,保留远程文件的文件名 -p/--proxytunnel 使用HTTP代理 --proxy-anyauth 选择任一代理身份验证方法 --proxy-basic 在代理上使用基本身份验证 --proxy-digest 在代理上使用数字身份验证 --proxy-ntlm 在代理上使用ntlm身份验证 -P/--ftp-port 使用端口地址,而不是使用PASV -Q/--quote 文件传输前,发送命令到服务器 -r/--range 检索来自HTTP/1.1或FTP服务器字节范围 --range-file 读取(SSL)的随机文件 -R/--remote-time 在本地生成文件时,保留远程文件时间 --retry 传输出现问题时,重试的次数 --retry-delay 传输出现问题时,设置重试间隔时间 --retry-max-time 传输出现问题时,设置最大重试时间 -s/--silent静音模式。不输出任何东西 -S/--show-error 显示错误 --socks4 用socks4代理给定主机和端口 --socks5 用socks5代理给定主机和端口 --stderr -t/--telnet-option Telnet选项设置 --trace 对指定文件进行debug --trace-ascii Like --跟踪但没有hex输出 --trace-time 跟踪/详细输出时,添加时间戳 -T/--upload-file 上传文件 --url Spet URL to work with -u/--user 设置服务器的用户和密码 -U/--proxy-user 设置代理用户名和密码 -v/--verbose -V/--version 显示版本信息 -w/--write-out [format]什么输出完成后 -x/--proxy 在给定的端口上使用HTTP代理 -X/--request 指定什么命令 -y/--speed-time 放弃限速所要的时间。默认为30 -Y/--speed-limit 停止传输速度的限制,速度时间'秒 -z/--time-cond 传送时间设置 -0/--http1.0 使用HTTP 1.0 -1/--tlsv1 使用TLSv1(SSL) -2/--sslv2 使用SSLv2的(SSL) -3/--sslv3 使用的SSLv3(SSL) --3p-quote like -Q for the source URL for 3rd party transfer --3p-url 使用url,进行第三方传送 --3p-user 使用用户名和密码,进行第三方传送 -4/--ipv4 使用IP4 -6/--ipv6 使用IP6 -#/--progress-bar 用进度条显示当前的传送状态
-a/--append 上传文件时,附加到目标文件 -A/--user-agent 设置用户代理发送给服务器 - anyauth 可以使用“任何”身份验证方法 -b/--cookie cookie字符串或文件读取位置 - basic 使用HTTP基本验证 -B/--use-ascii 使用ASCII /文本传输 -c/--cookie-jar 操作结束后把cookie写入到这个文件中 -C/--continue-at 断点续转 -d/--data HTTP POST方式传送数据 --data-ascii 以ascii的方式post数据 --data-binary 以二进制的方式post数据 --negotiate 使用HTTP身份验证 --digest 使用数字身份验证 --disable-eprt 禁止使用EPRT或LPRT --disable-epsv 禁止使用EPSV -D/--dump-header 把header信息写入到该文件中 --egd-file 为随机数据(SSL)设置EGD socket路径 --tcp-nodelay 使用TCP_NODELAY选项 -e/--referer 来源网址 -E/--cert 客户端证书文件和密码 (SSL) --cert-type 证书文件类型 (DER/PEM/ENG) (SSL) --key 私钥文件名 (SSL) --key-type 私钥文件类型 (DER/PEM/ENG) (SSL) --pass 私钥密码 (SSL) --engine 加密引擎使用 (SSL). "--engine list" for list --cacert CA证书 (SSL) --capath CA目录 (made using c_rehash) to verify peer against (SSL) --ciphers SSL密码 --compressed 要求返回是压缩的形势 (using deflate or gzip) --connect-timeout 设置最大请求时间 --create-dirs 建立本地目录的目录层次结构 --crlf 上传是把LF转变成CRLF -f/--fail 连接失败时不显示http错误 --ftp-create-dirs 如果远程目录不存在,创建远程目录 --ftp-method [multicwd/nocwd/singlecwd] 控制CWD的使用 --ftp-pasv 使用 PASV/EPSV 代替端口 --ftp-skip-pasv-ip 使用PASV的时候,忽略该IP地址 --ftp-ssl 尝试用 SSL/TLS 来进行ftp数据传输 --ftp-ssl-reqd 要求用 SSL/TLS 来进行ftp数据传输 -F/--form 模拟http表单提交数据 -form-string 模拟http表单提交数据 -g/--globoff 禁用网址序列和范围使用{}和[] -G/--get 以get的方式来发送数据 -h/--help 帮助 -H/--header 自定义头信息传递给服务器 --ignore-content-length 忽略的HTTP头信息的长度 -i/--include 输出时包括protocol头信息 -I/--head 只显示文档信息 从文件中读取-j/--junk-session-cookies忽略会话Cookie - 界面指定网络接口/地址使用 - krb4 <级别>启用与指定的安全级别krb4 -j/--junk-session-cookies 读取文件进忽略session cookie --interface 使用指定网络接口/地址 --krb4 使用指定安全级别的krb4 -k/--insecure 允许不使用证书到SSL站点 -K/--config 指定的配置文件读取 -l/--list-only 列出ftp目录下的文件名称 --limit-rate 设置传输速度 --local-port 强制使用本地端口号 -m/--max-time 设置最大传输时间 --max-redirs 设置最大读取的目录数 --max-filesize 设置最大下载的文件总量 -M/--manual 显示全手动 -n/--netrc 从netrc文件中读取用户名和密码 --netrc-optional 使用 .netrc 或者 URL来覆盖-n --ntlm 使用 HTTP NTLM 身份验证 -N/--no-buffer 禁用缓冲输出 -o/--output 把输出写到该文件中 -O/--remote-name 把输出写到该文件中,保留远程文件的文件名 -p/--proxytunnel 使用HTTP代理 --proxy-anyauth 选择任一代理身份验证方法 --proxy-basic 在代理上使用基本身份验证 --proxy-digest 在代理上使用数字身份验证 --proxy-ntlm 在代理上使用ntlm身份验证 -P/--ftp-port 使用端口地址,而不是使用PASV -Q/--quote 文件传输前,发送命令到服务器 -r/--range 检索来自HTTP/1.1或FTP服务器字节范围 --range-file 读取(SSL)的随机文件 -R/--remote-time 在本地生成文件时,保留远程文件时间 --retry 传输出现问题时,重试的次数 --retry-delay 传输出现问题时,设置重试间隔时间 --retry-max-time 传输出现问题时,设置最大重试时间 -s/--silent静音模式。不输出任何东西 -S/--show-error 显示错误 --socks4 用socks4代理给定主机和端口 --socks5 用socks5代理给定主机和端口 --stderr -t/--telnet-option Telnet选项设置 --trace 对指定文件进行debug --trace-ascii Like --跟踪但没有hex输出 --trace-time 跟踪/详细输出时,添加时间戳 -T/--upload-file 上传文件 --url Spet URL to work with -u/--user 设置服务器的用户和密码 -U/--proxy-user 设置代理用户名和密码 -v/--verbose -V/--version 显示版本信息 -w/--write-out [format]什么输出完成后 -x/--proxy 在给定的端口上使用HTTP代理 -X/--request 指定什么命令 -y/--speed-time 放弃限速所要的时间。默认为30 -Y/--speed-limit 停止传输速度的限制,速度时间'秒 -z/--time-cond 传送时间设置 -0/--http1.0 使用HTTP 1.0 -1/--tlsv1 使用TLSv1(SSL) -2/--sslv2 使用SSLv2的(SSL) -3/--sslv3 使用的SSLv3(SSL) --3p-quote like -Q for the source URL for 3rd party transfer --3p-url 使用url,进行第三方传送 --3p-user 使用用户名和密码,进行第三方传送 -4/--ipv4 使用IP4 -6/--ipv6 使用IP6 -#/--progress-bar 用进度条显示当前的传送状态
【option参数】
-h/--help 显示 curl 命令使用方法的简要帮助信息
-M/--manual 显示详细帮助文档
-a/--append 向服务器端文件追加内容。如果服务器端文件不存在,将创建该文件。
-A/--user-agent
-H/--header
不要手动为你的 header 内容添加换行标记 \r\n,因为 curl 会帮你处理,否则只会让你的代码出现莫名奇妙的问题。
添加、替换、删除 header 字段的操作均由该参数实现。
-I/--head 只接收 response数据包中 header 字段的内容。
-b/--cookie
如果内容中没有等号 =,则会被解析为存储 Cookie 的文件,此时还应该配合参数 -L/--location 使用。
-c/--cookie-jar
-D/--dump-header
--connect-timeout
-m/--max-time
-C/--continue-at
--create-dirs 创建目录。通常与参数 -o 连用,用于为 /dir/filename 这样的参数创建目录 dir/。比如 -c /recvDir/cookie.txt --create-dirs
--ftp-create-dirs 为 FTP/SFTP 传输创建远程目录。
--crlf 在 FTP 上传中将 LF 转换为 CRLF。
-d/--data 为 POST 数据包指定要向 HTTP 服务器发送的数据并发送出去。这个过程和在浏览器中点击“submit”按钮是一样的,且数据将以 content-type application/x-www-form-urlencoded 的方式被编码。
在同一条命令中多次使用 -d 参数,参数后的内容会被符号 & 拼接起来。比如 -d name=daniel -d skill=lousy 会被转化为 name=daniel&skill=lousy
如果的内容以符号 @ 开头,其后的字符串将被解析为文件名,curl 命令会从这个文件中读取数据发送,但文件中的内容必须是 URL 编码的格式;如果内容以符号 - 开头,curl 命令将从 stdin 读取数据发送。
--data-binary 为 POST 数据包指定要向 HTTP 服务器发送的数据并发送出去。数据将以二进制的形式被送出。
--data-urlencode 为 POST 数据包指定要向 HTTP 服务器发送的数据并发送出去。数据在发送前将进行 URL-encode 编码。
--digest 为 HTTP 传输启用摘要加密算法,防止登录信息被明文传输。通常在其后使用 -u/--user 参数指定用户名和密码。
--ntlm
--negotiate
--anyauth
-e/--referer
-E/--cert
-f/--fail 禁止服务器在打开页面失败或脚本调用失败时向客户端发送错误说明,取而代之,curl 会返回错误码 22。
-F/--form
要将文件中的内容作为密码提交到服务器上,命令为:curl -F password= 在
比如 curl -F "web=@index.html;type=text/html" url.com
或者 curl -F "name=daniel;type=text/foo" url.com
还可以从文件读取待发送内容后,修改数据包中的文件名信息,像这样:curl -F "file=@localfile;filename=nameispost" url.com
-g/--globoff 关闭 URL 的通配符功能。这样就可以访问名称中含有字符 {、}、[、] 的文件了。
-G/--get 将 -d 参数后指定的数据以 GET 方法打包发送,并在数据末尾添加一个问号 ?
--hostpubmd5
-i/--include 使输出信息中包含 HTTP-header 的内容,比如 server-name、HTTP-version 等。
--interface
--keepalive-time
--K/--config
配置文件每一行只能写一个参数;支持使用符号 \ 对字符进行转义;如果内容中含有空格,需用引号括起来;以符号 # 开始的内容会被视为注释;文件中的 URL 信息需要写成 url = URL 这样的格式。
配置文件示例如下:
# --- Example file ---
# this is a comment
url = "curl.haxx.se"
output = "curlhere.html"
user-agent = "superagent/1.0"
# and fetch another URL too
url = "curl.haxx.se/docs/manpage.html"
-O
referer = "http://nowhereatall.com/"
# --- End of example file ---
-q 如果这个参数是 curl 命令的第一个参数,那么 curl 命令将不会去读取默认的 curlrc 配置文件。
--libcurl
--limit-rate
--local-port
--L/--location 当服务器报告被请求的页面已被移动到另一个位置时(通常返回 3XX 错误代码),允许 curl 使用新的地址重新访问。如果跳转链接指向了一个不同的主机,curl 将不向其发送用户名和密码。
--location-trusted 该参数和 -L 参数类似,也可让 curl 继续访问跳转链接,区别在于该参数允许向跳转链接发送明文用户名和密码。
--max-redirs
-m/--max-time
-o/--output
比如下面这样的写法:
curl http://{one,two}.site.com -o "file_#1.txt"
curl http://{site,host}.host[1-5].com -o "#1_#2"
-O/--remote-name 在本地保存获取的数据时,使用她们在远程服务器上的文件名进行保存。
--random-file
--retry
-s/--silent 将 curl 设定在静默模式下工作。进度条和错误消息都不会被显示。
--stderr
-T/--upload-file
命令格式如下:
curl -T "{file1,file2}" http://www.uploadtothissite.com
curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
--trace
--trace-ascii
-u/--user
-U/--proxy-user
-v/--verbose 显示数据传输过程中的详细信息。
-V/--version 显示 curl 及其所使用的 libcurl 的版本信息。
-w/--write-out
所有支持的变量如下表所示:
url_effective 上次访问的URL。
http_code 上一次 HTTP 或 FTP 数据传输过程中的 response 数值代码。
http_connect 上一次 CONNECT 请求中的数值代码
time_total 数据传输消耗的总时间,以秒为单位,精度为毫秒。
time_namelookup 从数据传输开始到域名解析完成所花费的时间。
time_connect TCP连接建立成功所花费的时间。
time_appconnect 应用层协议,如 SSL/SSH、三次握手等过程完成所花费的时间。
time_redirect 从跳转链接被激活到真正开始从跳转链接下载数据所经过的时间。
time_starttransfer 从请求连接开始,到第一个字节被传送前所经过的时间。
size_download 数据传输过程中下载的总数据大小。
size_upload 数据传输过程中上传的总数据大小。
size_header 下载的数据包中,header 字段的总数据大小。
size_request 被发送的 HTTP request 的总数据大小。
speed_download 整个数据传输过程中的平均数据下载速度。
speed_upload 整个数据传输过程中的平均数据上传速度。
content_type 被请求访问的文件的 Content_Type 类型。
num_redirects 访问请求中包含的跳转链接数量。
redirect_url 跳转链接指向的URL
ssl_verify_result SSL验证的结果。值为 0 时表示验证成功。
-x/--proxy
-X/--request
-z/--time-cond
-0/--http1.0 强制在 HTTP 传输时使用 HTTP 1.0 协议。默认使用 HTTP 1.1
-1/--tlsv1 强制在 SSL 传输时使用 TLS v1 协议
-2/--sslv2 强制在 SSL 传输时使用 SSL v2 协议
-3/--sslv3 强制在 SSL 传输时使用 SSL v3 协议
-4/--ipv4 强制解析域名为 IPv4 地址
-6/--ipv6 强制解析域名为 IPv6 地址
【退出代码/返回值】
1 curl 不支持该协议
2 curl 初始化失败
3 URL 格式错误
5 解析代理服务器失败
6 解析主机失败
7 建立与主机的连接失败
8 无法解析 FTP 服务器返回的消息
9 FTP 服务器拒接访问。可能是拒绝登录或拒绝访问特定目录,但很多情况下是访问了一个不存在的位置导致的
11 无法解析 FTP 服务器的 PASS 回复消息
13 无法解析 FTP 服务器的 PASV 回复消息
14 无法解析 FTP 服务器的 227-line 回复消息
15 无法解析 FTP 主机
17 无法与 FTP 服务器建立二进制传输模式
18 文件传输不完整。只有文件的一部分被传送了。
19 FTP 下载/访问指定的文件失败
21 FTP 引用错误
22 HTTP 页面获取失败。将返回 400 及其以上的错误码。
23 写入数据到本地文件系统发生错误
25 FTP 服务器无法存储被上传的文件
26 读取数据出错
27 内存分配失败
28 操作超时
30 FTP 服务器运行 PORT 命令失败
31 FTP 服务器运行 REST 命令失败
33 HTTP 服务器执行 range 命令失败
34 HTTP 服务器 post 方法错误
35 SSL 连接出错。通常是 SSL 握手失败。
36 FTP 断点续传出错,无法继续前一次下载任务。
37 FILE 协议无法打开文件。可能是没有权限导致的
38 LDAP 协议无法执行 bind 操作
39 LDAP 协议执行搜索功能失败
41 没有找到匹配的 LDAP 功能
42 curl 被其它应用程序中止运行
43 发生内部错误。通常是因为调用函数时传递了错误的参数
45 接口调用错误
47 跳转链接数量达到上限
48 为 telnet 协议指定了一个未知的参数
49 telnet 协议的参数格式有误
51 SSL 认证或 SSH 的 MD5 指纹不正确
52 服务器无应答
53 未找到 SSL 加密引擎
54 无法将 SSL 加密引擎设为默认引擎
55 发送网络数据失败
56 接收网络数据失败
58 本地证书有问题
59 无法使用指定的 SSL 密码
60 已知的 CA证书无法用于验证
61 无法识别传输编码
62 无效的 LDAP URL
63 文件大小超过限制
64 请求的 FTP SSL 级别获取失败
65 发送需要进行 rewind 的数据失败
66 解析 SSL 引擎失败
67 用户名/密码验证失败,curl 无法登录
68 TFTP 服务器上没有找到指定的文件
69 对 TFTP 服务器的访问出现权限问题
70 TFTP 服务器已耗尽磁盘空间
71 非法的 TFTP 操作
72 未知的 TFTP 传输 ID
73 TFTP 企图传输一个已经存在的文件
74 用户不存在导致 TFTP 操作失败
75 字符转换失败
76 需要使用字符转换函数
77 读取 SSL CA 证书出错。可能是证书路径不正确,也可能是没有权限
78 URL 中指定的资源不存在
79 SSH 会话中发生了未知错误
80 中断 SSH 连接失败
82 无法加载 CRL 文件。可能是没有指定正确的格式
83 发布者身份验证失败
【相关阅读】
[1] curl Manual Page within Linux
[2] 《Linux curl使用简单介绍》
[3] 《curl 使用方法(转)》
[4] 《curl命令使用》
原文:https://blog.csdn.net/Qidi_Huang/article/details/51278056