curl 命令是一个利用 URL 规则在 Shell 终端命令行下工作的文件传输工具,它支持文件的上传和下载,是综合传输工具,但按使用习惯,一般称 curl 为下载工具。curl 被设计为无需用户交互即可工作。
作为一款强力的下载工具,curl 支持包括 HTTP、HTTPS、FTP、SFTP、SCP 等众多协议,还提供了大量有用的技巧,如代理支持、用户身份验证、FTP 上传、HTTP post、SSL 连接、cookies、文件传输恢复、Metalink 等等。
`curl [OPTIONS] [URL...]`
`-#, --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 NAME 选择用于密码操作的OpenSSL加密引擎 --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, --header LINE 自定义头信息传递给服务器 --ignore-content-length 忽略的 HTTP 头信息的长度 -i, --include 输出时包括 protocol 头信息 -I, --head 只显示请求头信息 -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[-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 FILE 把输出写到指定文件中 -O, --remote-name 把输出写到与远程文件同名的本地文件中 -p, --proxytunnel 使用 HTTP 代理 --proxy-anyauth 选择任一代理身份验证方法 --proxy-basic 在代理上使用基本身份验证 --proxy-digest 在代理上使用数字身份验证 --proxy-ntlm 在代理上使用 ntlm 身份验证 -P, --ftp-port ADDRESS 使用端口地址,而不是使用PASV -q, --disable 作为第一个参数,关闭 .curlrc -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 将对 stderr 的所有写入重定向到指定的文件 -t, --telnet-option OPT=VAL Telnet 选项设置 --trace FILE 对指定文件进行 debug --trace-ascii FILE 启用对所有传入和传出数据(包括描述性信息)的完整跟踪转储到给定文件。使用“-”作为文件名将输出发送到 stdout --trace-time 跟踪详细输出时,添加时间戳 -T, --upload-file FILE 上传文件 --url URL 指定要提取的 URL -u, --user USER[:PASSWORD] 设置服务器的用户和密码 -U, --proxy-user USER[:PASSWORD] 设置代理用户名和密码 -w, --write-out FORMAT 什么输出完成后 -x, --proxy HOST[:PORT] 在给定的端口上使用HTTP代理 -X, --request COMMAND 指定与 HTTP 服务器通信时使用的自定义请求方法,默认为 GET -y, --speed-time 放弃限速所要的时间,默认为30 -Y, --speed-limit 停止传输速度的限制,速度时间`
`curl -X GET 'http://9.138.158.214:10000?advertiser_id=93&auth_code=AUTH_CODE' -H 'Content-Type:application/json' -d '{"action_time":1591100087,"ad_id":"101642"}'`
如果 URL 携带参数,需要使用单引号或双引号将 URL 引起来,因为字符 & 是 Shell 特殊字符,或者使用反斜杠对其转义。
`curl https://www.baidu.com`
执行后,百度官网的网页内容就会显示在屏幕上了。
`curl https://www.baidu.com > baidu_index.html # 或 curl https://www.baidu.com -o baidu_index.html`
`curl -s -O https://dl.softmgr.qq.com/original/im/QQ9.3.3.27011.exe`
`curl -# -O https://dl.softmgr.qq.com/original/im/QQ9.3.3.27011.exe ######################################################################## 100.0%`
`curl -u root https://github.com/jindeng/sz14.git Enter host password for user 'root':`
`curl (-I | --head) https://github.com/jindeng/sz14.git`
`curl URL --limit-rate 50k`
使用 --limit-rate 限制 curl 的下载速度,命令中用 k(千字节)和 m(兆字节)指定下载速度限制。
`curl URL --max-filesize bytes`
使用 --max-filesize 指定可下载的最大文件大小,如果文件大小超出限制,命令则返回一个非 0 退出码,如果命令正常则返回 0。
`curl URL -A "Mozilla/5.0"`
有些网站访问会提示只能使用 IE 浏览器来访问,这是因为这些网站设置了检查用户代理,可以使用curl把用户代理设置为IE,这样就可以访问了。使用 -A 或者 --user-agent 选项。
`curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" URL`
`curl URL --cookie "user=root;pass=123456"`
将 cookie 另存为一个文件,使用 --cookie-jar 选项。
`curl URL --cookie-jar cookie_file`
`curl --referer URL1 URL2`
参照页是位于 HTTP 头部中的一个字符串,用来表示用户是从哪个页面到达当前页面的,如果用户点击网页 A 中的某个连接,那么用户就会跳转到B网页,网页 B 头部的参照页字符串就包含网页 A 的 URL。
`curl URL/File -C OFFSET`
偏移量是以字节为单位的整数,如果让 curl 自动推断出正确的续传位置使用:
`curl -C - URL`
`curl -f https://unknow.com`
`curl -T test.sql ftp://用户名:密码@ip:port/demo/curtain/bbstudy_files/`
`curl -u 用户名:密码 -O URL`
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!