【前言】
本文翻译和整理自 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 <string> 设置用户代理发送给服务器
- anyauth 可以使用“任何”身份验证方法
-b/--cookie <name=string/file> cookie字符串或文件读取位置
- basic 使用HTTP基本验证
-B/--use -ascii 使用ASCII /文本传输
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue -at <offset> 断点续转
-d/--data <data> HTTP POST方式传送数据
--data-ascii <data> 以ascii的方式post数据
--data-binary <data> 以二进制的方式post数据
--negotiate 使用HTTP身份验证
--digest 使用数字身份验证
--disable-eprt 禁止使用EPRT或LPRT
--disable-epsv 禁止使用EPSV
-D/--dump-header <file> 把header信息写入到该文件中
--egd-file <file> 为随机数据(SSL)设置EGD socket路径
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer 来源网址
-E/--cert <cert[:passwd]> 客户端证书文件和密码 (SSL)
--cert-type <type> 证书文件类型 (DER/PEM/ENG) (SSL)
--key <key> 私钥文件名 (SSL)
--key-type <type> 私钥文件类型 (DER/PEM/ENG) (SSL)
--pass <pass> 私钥密码 (SSL)
--engine <eng> 加密引擎使用 (SSL). "--engine list" for list
--cacert <file> CA证书 (SSL)
--capath <directory> CA目录 (made using c_rehash) to verify peer against (SSL)
--ciphers <list> SSL密码
--compressed 要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout <seconds> 设置最大请求时间
--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 <name=content> 模拟http表单提交数据
-form-string <name=string> 模拟http表单提交数据
-g/--globoff 禁用网址序列和范围使用{}和[]
-G/--get 以get的方式来发送数据
-h/--help 帮助
-H/--header <line>自定义头信息传递给服务器
--ignore-content-length 忽略的HTTP头信息的长度
-i/--include 输出时包括protocol头信息
-I/--head 只显示文档信息
从文件中读取-j/--junk-session-cookies忽略会话Cookie
- 界面<interface >指定网络接口/地址使用
- krb4 <级别>启用与指定的安全级别krb4
-j/--junk-session-cookies 读取文件进忽略session cookie
--interface < interface > 使用指定网络接口/地址
--krb4 <level> 使用指定安全级别的krb4
-k/--insecure 允许不使用证书到SSL站点
-K/--config 指定的配置文件读取
-l/--list-only 列出ftp目录下的文件名称
--limit-rate <rate> 设置传输速度
--local-port<NUM> 强制使用本地端口号
-m/--max-time <seconds> 设置最大传输时间
--max-redirs <num> 设置最大读取的目录数
--max-filesize <bytes> 设置最大下载的文件总量
-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 <address> 使用端口地址,而不是使用PASV
-Q/--quote <cmd>文件传输前,发送命令到服务器
-r/--range <range>检索来自HTTP/1.1或FTP服务器字节范围
--range-file 读取(SSL)的随机文件
-R/--remote-time 在本地生成文件时,保留远程文件时间
--retry <num> 传输出现问题时,重试的次数
--retry-delay <seconds> 传输出现问题时,设置重试间隔时间
--retry-max-time <seconds> 传输出现问题时,设置最大重试时间
-s/--silent静音模式。不输出任何东西
-S/--show-error 显示错误
--socks4 <host[:port]> 用socks4代理给定主机和端口
--socks5 <host[:port]> 用socks5代理给定主机和端口
--stderr <file>
-t/--telnet-option <OPT=val> Telnet选项设置
--trace <file> 对指定文件进行debug
--trace-ascii <file> Like --跟踪但没有hex输出
--trace-time 跟踪/详细输出时,添加时间戳
-T/--upload-file <file> 上传文件
--url <URL> Spet URL to work with
-u/--user <user[:password]>设置服务器的用户和密码
-U/--proxy-user <user[:password]>设置代理用户名和密码
-v/--verbose
-V/--version 显示版本信息
-w/--write-out [format]什么输出完成后
-x/--proxy <host[:port]>在给定的端口上使用HTTP代理
-X/--request <command>指定什么命令
-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 <string> 设置用户代理发送给服务器
- anyauth 可以使用“任何”身份验证方法
-b/--cookie <name=string/file> cookie字符串或文件读取位置
- basic 使用HTTP基本验证
-B/--use-ascii 使用ASCII /文本传输
-c/--cookie-jar <file> 操作结束后把cookie写入到这个文件中
-C/--continue-at <offset> 断点续转
-d/--data <data> HTTP POST方式传送数据
--data-ascii <data> 以ascii的方式post数据
--data-binary <data> 以二进制的方式post数据
--negotiate 使用HTTP身份验证
--digest 使用数字身份验证
--disable-eprt 禁止使用EPRT或LPRT
--disable-epsv 禁止使用EPSV
-D/--dump-header <file> 把header信息写入到该文件中
--egd-file <file> 为随机数据(SSL)设置EGD socket路径
--tcp-nodelay 使用TCP_NODELAY选项
-e/--referer 来源网址
-E/--cert <cert[:passwd]> 客户端证书文件和密码 (SSL)
--cert-type <type> 证书文件类型 (DER/PEM/ENG) (SSL)
--key <key> 私钥文件名 (SSL)
--key-type <type> 私钥文件类型 (DER/PEM/ENG) (SSL)
--pass <pass> 私钥密码 (SSL)
--engine <eng> 加密引擎使用 (SSL). "--engine list" for list
--cacert <file> CA证书 (SSL)
--capath <directory> CA目录 (made using c_rehash) to verify peer against (SSL)
--ciphers <list> SSL密码
--compressed 要求返回是压缩的形势 (using deflate or gzip)
--connect-timeout <seconds> 设置最大请求时间
--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 <name=content> 模拟http表单提交数据
-form-string <name=string> 模拟http表单提交数据
-g/--globoff 禁用网址序列和范围使用{}和[]
-G/--get 以get的方式来发送数据
-h/--help 帮助
-H/--header <line>自定义头信息传递给服务器
--ignore-content-length 忽略的HTTP头信息的长度
-i/--include 输出时包括protocol头信息
-I/--head 只显示文档信息
从文件中读取-j/--junk-session-cookies忽略会话Cookie
- 界面<interface>指定网络接口/地址使用
- krb4 <级别>启用与指定的安全级别krb4
-j/--junk-session-cookies 读取文件进忽略session cookie
--interface <interface> 使用指定网络接口/地址
--krb4 <level> 使用指定安全级别的krb4
-k/--insecure 允许不使用证书到SSL站点
-K/--config 指定的配置文件读取
-l/--list-only 列出ftp目录下的文件名称
--limit-rate <rate> 设置传输速度
--local-port<NUM> 强制使用本地端口号
-m/--max-time <seconds> 设置最大传输时间
--max-redirs <num> 设置最大读取的目录数
--max-filesize <bytes> 设置最大下载的文件总量
-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 <address> 使用端口地址,而不是使用PASV
-Q/--quote <cmd>文件传输前,发送命令到服务器
-r/--range <range>检索来自HTTP/1.1或FTP服务器字节范围
--range-file 读取(SSL)的随机文件
-R/--remote-time 在本地生成文件时,保留远程文件时间
--retry <num> 传输出现问题时,重试的次数
--retry-delay <seconds> 传输出现问题时,设置重试间隔时间
--retry-max-time <seconds> 传输出现问题时,设置最大重试时间
-s/--silent静音模式。不输出任何东西
-S/--show-error 显示错误
--socks4 <host[:port]> 用socks4代理给定主机和端口
--socks5 <host[:port]> 用socks5代理给定主机和端口
--stderr <file>
-t/--telnet-option <OPT=val> Telnet选项设置
--trace <file> 对指定文件进行debug
--trace-ascii <file> Like --跟踪但没有hex输出
--trace-time 跟踪/详细输出时,添加时间戳
-T/--upload-file <file> 上传文件
--url <URL> Spet URL to work with
-u/--user <user[:password]>设置服务器的用户和密码
-U/--proxy-user <user[:password]>设置代理用户名和密码
-v/--verbose
-V/--version 显示版本信息
-w/--write-out [format]什么输出完成后
-x/--proxy <host[:port]>在给定的端口上使用HTTP代理
-X/--request <command>指定什么命令
-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 <agent string> 为 HTTP 数据包指定 User-Agent 字段内容,即浏览器信息。如果内容含有空格,请使用单引号括起来。有的网站要求访问者必须使用特定的浏览器甚至版本,这种情况下可以使用该参数绕过服务器的检测。
-H/--header <header string> 为 HTTP 数据包指定 Header 字段内容。如果要删除某个 header 字段,可以使用 <字段名>: 的格式替换 <header string> 代表的内容。比如删除 Host 字段的内容,可以这样添加 -H 参数:-H "Host:"
不要手动为你的 header 内容添加换行标记 \r\n,因为 curl 会帮你处理,否则只会让你的代码出现莫名奇妙的问题。
添加、替换、删除 header 字段的操作均由该参数实现。
-I/--head 只接收 response数据包中 header 字段的内容。
-b/--cookie <name=data> 为发送的 HTTP 数据包指定 cookie 内容,通常是之前同服务器通讯时,从服务器接收到的 response数据包中 Set-Cookie 字段中的内容。如果要指定多对值,格式为“NAME1=VALUE1;NAME2=VALUE2”。
如果内容中没有等号 =,则会被解析为存储 Cookie 的文件,此时还应该配合参数 -L/--location 使用。
-c/--cookie-jar <filename> 存储 response数据包中的 cookie 信息到文件中。如果文件名是破折号 -,则 cookie 将在 stdout 被打印出来。Cookie信息使用 Netscape cookie文件的格式进行记录。cookie 写入失败不会导致 curl 命令中止,使用 -v 参数可以在操作失败时看到警告信息。
-D/--dump-header <filename> 存储 response数据包中的 header 信息到文件中。在 FTP 传输中使用时,FTP 服务器的回复消息会被视作 headers 存储起来。
--connect-timeout <seconds> 设置连接超时。这个值是对于连接建立阶段而言的,一旦连接被建立,这个限制就没用了。
-m/--max-time
-C/--continue-at <offset> 断点续传。<offset>是一个数值,表示从文件头开始计算的要跳过的字节数。如果<offset>被设定为破折号 -,那么 curl 命令将自行检测待传输文件的断点位置。
--create-dirs 创建目录。通常与参数 -o 连用,用于为 /dir/filename 这样的参数创建目录 dir/。比如 -c /recvDir/cookie.txt --create-dirs
--ftp-create-dirs 为 FTP/SFTP 传输创建远程目录。
--crlf 在 FTP 上传中将 LF 转换为 CRLF。
-d/--data <data> 为 POST 数据包指定要向 HTTP 服务器发送的数据并发送出去。这个过程和在浏览器中点击“submit”按钮是一样的,且数据将以 content-type application/x-www-form-urlencoded 的方式被编码。
在同一条命令中多次使用 -d 参数,参数后的内容会被符号 & 拼接起来。比如 -d name=daniel -d skill=lousy 会被转化为 name=daniel&skill=lousy
如果<data>的内容以符号 @ 开头,其后的字符串将被解析为文件名,curl 命令会从这个文件中读取数据发送,但文件中的内容必须是 URL 编码的格式;如果内容以符号 - 开头,curl 命令将从 stdin 读取数据发送。
--data-binary <data> 为 POST 数据包指定要向 HTTP 服务器发送的数据并发送出去。数据将以二进制的形式被送出。
--data-urlencode <data> 为 POST 数据包指定要向 HTTP 服务器发送的数据并发送出去。数据在发送前将进行 URL-encode 编码。
--digest 为 HTTP 传输启用摘要加密算法,防止登录信息被明文传输。通常在其后使用 -u/--user 参数指定用户名和密码。
--ntlm
--negotiate
--anyauth
-e/--referer <URL> 为 HTTP 数据包指定 Referer Page 信息,即前一个被访问页面的 URL。通常这个信息被服务器用于判断自己是否被盗链,如果发现服务器端有这样的检测机制,则可以使用该参数绕过检测。
-E/--cert <certificate[:password]> 为 HTTPS/FTPS 数据包指定数字证书。数字证书必须是 PEM 格式。如果 password 没有在内容中显式给定,则会在连接建立时被服务器端询问。
-f/--fail 禁止服务器在打开页面失败或脚本调用失败时向客户端发送错误说明,取而代之,curl 会返回错误码 22。
-F/--form <name=content> 模拟用户在浏览器上点击“submit”按钮提交表单的操作。如果想提交文件,可以将<name=content>中 content部分的内容替换为 @filename 的格式;如果想提交文件中的内容,可以将 content部分的内容替换为 <filename 格式;如果想提交从 stdin 获取的到的数据,可以将 content部分的内容替换为 @- 或者 <-
比如,要提交存储密码的文件到服务器上,命令为:curl -F password=@/etc/passwd www.mypasswords.com
要将文件中的内容作为密码提交到服务器上,命令为:curl -F password=</etc/passwd www.mypasswords.com
在<name=content>内容中添加“type=xxx”字段可以指定 Content-Type 类型。
比如 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 <md5> 为数据包指定一个 32 位的十六进制数。这个数应该与远程服务器公钥的 MD5 值相同。如果 MD5 值不相同,curl 将中止连接。这个参数只在 SCP/SFTP 传输协议中使用。
-i/--include 使输出信息中包含 HTTP-header 的内容,比如 server-name、HTTP-version 等。
--interface <name> 使用指定网卡访问/传输数据。命令格式:curl --interface eth0:1 http://www.netscape.com/
--keepalive-time <seconeds> 为连接设定保活时间。这个值同时也是相邻 2 次发送保活消息的时间间隔。
--K/--config <config file> 为 curl 命令指定一个配置文件,curl 会从该文件中读取内容并作为自己的运行参数。默认的配置文件是 ~/.curlrc。当 <config file> 的内容被写成符号 - 时,curl 会从 stdin 读取配置。
配置文件每一行只能写一个参数;支持使用符号 \ 对字符进行转义;如果内容中含有空格,需用引号括起来;以符号 # 开始的内容会被视为注释;文件中的 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 <file> 将本条命令实现的功能转换成调用 libcurl 的 C 代码,并保存在 <file> 文件中。但是目前还不能很好地转化带 -F 参数的命令。
--limit-rate <speed> 为数据包指定最大传输速率,这样就不会占用整个带宽。通常在数据处理管道不够用时使用。默认的速率单位是 bytes/s,如果在数字后加上 k、m、g 等后缀,如 200k,则表示 200Kb/s。
--local-port <num>[-num] 为连接指定一个本地端口。
--L/--location 当服务器报告被请求的页面已被移动到另一个位置时(通常返回 3XX 错误代码),允许 curl 使用新的地址重新访问。如果跳转链接指向了一个不同的主机,curl 将不向其发送用户名和密码。
--location-trusted 该参数和 -L 参数类似,也可让 curl 继续访问跳转链接,区别在于该参数允许向跳转链接发送明文用户名和密码。
--max-redirs <num> 指定最大跳转次数。默认的次数限制为 50。如果将 <num> 设置为 -1 表示不进行限制。
-m/--max-time <seconds> 为数据传输过程指定超时时间。如果传输过程在这个时间内没有完成,连接将被中止。防止脚本因为网络不好或链接失效而挂死。
-o/--output <file> 将获取到的数据存入文件中,而不是打印出来。如果在 URL 中使用了 {} 或 [] 进行通配,我们就可以在 <file> 中使用 #1、#2 ... 的形式来顺序表示这些通配符中的内容。
比如下面这样的写法:
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 <file> 为 SSL 连接指定一个存有随机数的种子的文件。
--retry <num> 在数据包的传输失败时,为其指定重试次数。默认次数为 0,即不重传。连接超时、500错误代码都会引起重传。
-s/--silent 将 curl 设定在静默模式下工作。进度条和错误消息都不会被显示。
--stderr <file> 重定向错误输出到文件。
-T/--upload-file <file> 这个参数用于向远程服务器传输指定文件。上传文件时,URL必须以符号 / 结尾才会被识别为目录。当文件名是符号 - 时,curl 将从 stdin 读取输入数据进行上传。如果远端是 HTTP 服务器,那么应该使用 PUT 方法。
命令格式如下:
curl -T "{file1,file2}" http://www.uploadtothissite.com
curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/
--trace <file> 启用对所有数据包传输的追踪,并记录到指定文件中。当文件名是符号 - 时,追踪消息将输出到标准输出。
--trace-ascii <file> 类似于 --trace ,但是是以 ascii 的形式输出的而非十六进制,便于阅读。
-u/--user <user:password> 为数据传输在服务器端的身份验证提供用户名/密码信息。
-U/--proxy-user <username:password> 为数据传输在代理服务器上的身份验证提供用户名/密码信息。
-v/--verbose 显示数据传输过程中的详细信息。
-V/--version 显示 curl 及其所使用的 libcurl 的版本信息。
-w/--write-out <format> 在数据传输完成后,输出和本次传输相关的参数信息,比如 header 的大小、下载速度等。<format>部分即格式化输出内容,变量使用格式为 %{varible},使用 %% 输出百分号 %,使用 \r、\n、\t 输出 回车、换行、制表符。
所有支持的变量如下表所示:
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 <proxyhost[:port]> 为数据传输指定代理服务器。如果没有显示指定端口号,则使用默认端口号1080
-X/--request <command> 为 HTTP 数据包指定一个方法,比如 PUT、DELETE。默认的方法是 GET。
-z/--time-cond <date expression> 请求一个时间点比 <date expression> 中描述的时间更早或更晚的文件。<date expression>以符号 - 开始时表示访问比该时间点更早的文件,以数字开始时表示访问比该时间点更晚的文件。
-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
本文翻译和整理自 Linux-2.6.32 中和
curl
相关的 Manual Page 描述文档。文档目的仅在提醒读者所遗忘的知识点,故在整理时削弱了阅读流畅性,适用于对
curl
有一定了解的开发人员。
curl
[options] [URL...]
curl
命令
用作网络数据包收发,常应用于非交互式环境中。
URL 的格式依赖于
命令
所使用的网络协议,相关详细信息可以查看《RFC 3986》文档。
如果在一条
命令
中访问多个文件
curl
是一个
命令
行工具,通过指定的URL来上传或下载数据,并将数据展示出来。
curl
中的c表示client,而URL,就是URL。这里我们介绍一下
curl
的使用。
1.
命令
行基础
1.1
命令
行选项
1. 短形式
在
curl
中可以使用短形式的
命令
行选项,比如通知
curl
打开verbose模式,可以使用-v选项:
$
curl
-v www.baidu.com
这里,-v就是短形式的选项,我们使用一个中划线(-)并紧跟着一个字母来指定一个短形式的选项。
在这个例子中,-v就像一个开关一样,指定某个变量是
用法:
curl
[options] [URL...]DESCRIPTION(描述):
curl
用来‘从server传输数据’或者‘传输数据到server’,支持多种协议(HTTP, HTTPS, FTP, FTPS, SCP, SFTP, TFTP, DICT, TELNET, LDAP or FILE)。
curl
提供了大量有用的技巧像 proxy support, use...
在Linux系统中,
curl
是一个利用URL规则在
命令
行下工作的文件传输工具,可以说是一款很强大的http
命令
行工具。它支持文件的上传和下载操作,是综合传输工具,习惯上称url为下载工具。下面就日常运维中基于
curl
命令
使用做下总结(用法、
详解
、指南):
一、
Curl
命令
用法
curl
语法和参数选项
curl
[option] [url]
curl
常见参数
-a/–append 上传文件时,附加到目标文件
-A/–user-agent
1.
curl
命令
简介
cURL
(CommandLine Uniform Resource Locator),是一个利用 URL 语法,在
命令
行终端下使用的网络请求工具,支持 HTTP、HTTPS、FTP 等协议。
cURL
也有用于程序开发使用的版本 lib
curl
。
Linux、MAC 一般系统默认已安装好
curl
,直接在终端使用
命令
即可,如果需要手动安装,可以到
curl
.haxx.se下载安装。
Windows 系统
curl
下载地址:https://
curl
.haxx.se/wind...
命令
:
curl
在Linux中
curl
是一个利用URL规则在
命令
行下工作的文件传输工具,可以说是一款很强大的http
命令
行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
语法:#
curl
[option] [url]
常见参数:
-A/–user-agent 设置用户代理发送给服务器
-b/–cookie <name=string/file> cookie字符串或文件读取位置
-c/–cookie-jar
在使用c++去请求http服务的时候,使用的是著名的
curl
工具提供的类库 lib
curl
,但是在使用的过程中发现,如果请求的参数值带了空格或者是参数是中文,会导致响应的回调函数没有被执行,虽然
curl
_easy_perform 返回的
CURL
code 为
CURL
E_OK,但是实际上是没有数据的。考虑到可能需要转义,于是研究了下官方文档,具体参考如下链接: http://
curl
.haxx.se...
这个坑陷进去好久,网上找了好多办法都没解决中文乱码服务器。工程是多字符集。一开始按网上例子做,如下int PostData(CString postdata, CStringA url,string & sErro)
TRACE(postdata);
TRACE(_T("\n**************************************\n"));
if(!url)...