Linux curl(概要)
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
语法
curl [option] [url]
常见参数
- -A/–user-agent 设置用户代理发送给服务器
- -b/–cookie cookie字符串或文件读取位置
- -c/–cookie-jar 操作结束后把cookie写入到这个文件中
- -C/–continue-at 断点续转
- -D/–dump-header 把header信息写入到该文件中
- -e/–referer 来源网址
- -f/–fail 连接失败时不显示http错误
- -o/–output 把输出写到该文件中
- -O/–remote-name 把输出写到该文件中,保留远程文件的文件名
- -r/–range 检索来自HTTP/1.1或FTP服务器字节范围
- -s/–silent 静音模式。不输出任何东西
- -T/–upload-file 上传文件
- -u/–user 设置服务器的用户和密码
- -w/–write-out [format] 什么输出完成后
- -x/–proxy 在给定的端口上使用HTTP代理
- -#/–progress-bar 进度条显示当前的传送状态
- -a/–append 上传文件时,附加到目标文件
- –anyauth 可以使用“任何”身份验证方法
- –basic 使用HTTP基本验证
- -B/–use-ascii 使用ASCII文本传输
- -d/–data HTTP POST方式传送数据
- –data-ascii 以ascii的方式post数据
- –data-binary 以二进制的方式post数据
- –negotiate 使用HTTP身份验证
- –digest 使用数字身份验证
- –disable-eprt 禁止使用EPRT或LPRT
- –disable-epsv 禁止使用EPSV
- –egd-file 为随机数据(SSL)设置EGD socket路径
- –tcp-nodelay 使用TCP_NODELAY选项
- -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
- –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 读取文件时忽略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 禁用缓冲输出
- -p/–proxytunnel 使用HTTP代理
- –proxy-anyauth 选择任一代理身份验证方法
- –proxy-basic 在代理上使用基本身份验证
- –proxy-digest 在代理上使用数字身份验证
- –proxy-ntlm 在代理上使用ntlm身份验证
- -P/–ftp-port 使用端口地址,而不是使用PASV
- -Q/–quote 文件传输前,发送命令到服务器
- –range-file 读取(SSL)的随机文件
- -R/–remote-time 在本地生成文件时,保留远程文件时间
- –retry 传输出现问题时,重试的次数
- –retry-delay 传输出现问题时,设置重试间隔时间
- –retry-max-time 传输出现问题时,设置最大重试时间
- -S/–show-error 显示错误
- –socks4 用socks4代理给定主机和端口
- –socks5 用socks5代理给定主机和端口
- -t/–telnet-option Telnet选项设置
- –trace 对指定文件进行debug
- –trace-ascii Like --跟踪但没有hex输出
- –trace-time 跟踪/详细输出时,添加时间戳
- –url Spet URL to work with
- -U/–proxy-user 设置代理用户名和密码
- -V/–version 显示版本信息
- -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
访问的URL
你可以在命令行上指定任意数量的url。它们将按指定的顺序依次获取。
你可以指定多个url,或url的部分通过在花括号内编写部分集,如:
#http://site.{one,two,three}.com curl http://www.zhangblog.com/2019/06/16/hexo{04,05,06}/ -I # 查看信息
或者可以使用[]得到字母数字序列的序列,如:
#ftp://ftp.numericals.com/file[1-100].txt #ftp://ftp.numericals.com/file[001-100].txt # 前导用零 #ftp://ftp.letters.com/file[a-z].txt curl http://www.zhangblog.com/2019/06/16/hexo[04-06]/ -I # 查看信息
不支持嵌套序列,但可以使用几个相邻的序列:
http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html
你可以指定一个步长计数器的范围,以获得每第n个数字或字母:
http://www.numericals.com/file[1-100:10].txt http://www.letters.com/file[a-z:2].txt
如果指定URL而没有protocol:// prefix,默认为HTTP。
示例
#执行后,www.linux.com 的html就会显示在屏幕上 curl http://www.linux.com #指定proxy服务器以及其端口 curl -x 192.168.100.100:1080 http://www.linux.com #模仿浏览器 curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com #伪造referer(盗链) curl -e "www.linux.com" http://mail.linux.com #显示抓取错误 curl -f http://www.linux.com/error #指定要使用curl的最大传输速率。 #单位:默认字节,除非添加后缀。附加 “k” 或 “K” 表示千字节, “m” 或 “M” 表示兆字节,而 “g” 或 “G” 表示千兆字节。例如:200K, 3m和1G。 curl --limit-rate 500 http://www.baidu.com/ curl --limit-rate 2k http://www.baidu.com/ #指定本地的一个端口或端口范围去连接。 #请注意,端口号本质上是一种稀缺资源,有时会很忙,因此将此范围设置为太窄可能会导致不必要的连接失败。 curl --local-port 9000 http://www.baidu.com/ curl --local-port 9000-9999 http://www.baidu.com/
保存访问的网页
#使用linux的重定向功能保存 curl http://www.linux.com >> linux.html #使用curl的内置option:-o(小写)保存网页 curl -o linux.html http://www.linux.com #使用curl的内置option:-O(大写)保存网页中的文件,要注意这里后面的url要具体到某个文件,不然抓不下来. curl -O http://www.linux.com/hello.sh #测试网页返回值 curl -o /dev/null -s -w %{http_code} www.linux.com\
cookie
#保存http的response里面的cookie信息。内置option:-c(小写),执行后cookie信息就被存到了cookiec.txt里面了 curl -c cookiec.txt http://www.linux.com #保存http的response里面的header信息。内置option: -D curl -D cookied.txt http://www.linux.com #使用保存的cookie信息。内置option: -b curl -b cookiec.txt http://www.linux.com
下载上传文件
#使用内置option:-o(小写) curl -o dodo1.jpg http:www.linux.com/dodo1.JPG #使用内置option:-O(大写),这样就会以服务器上的名称保存文件到本地 curl -O http://www.linux.com/dodo1.JPG #循环下载,有时候下载图片可以能是前面的部分名称是一样的,就最后的尾椎名不一样,这样就会把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下来 curl -O http://www.linux.com/dodo[1-5].JPG #下载重命名 curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG #分块下载 curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1.JPG curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG cat dodo1_part* > dodo1.JPG #指定要下载的文件的最大大小(以字节为单位)。 curl --max-filesize 1000 -I http://www.zhangblog.com/uploads/hexo/00.jpg #通过ftp下载文件,curl提供两种从ftp中下载的语法 curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG #显示下载进度条 curl -# -O http://www.linux.com/dodo1.JPG #不会显示下载进度信息 curl -s -O http://www.linux.com/dodo1.JPG #断点续传 curl -C -O http://www.linux.com/dodo1.JPG #上传文件 curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/
提交表单
#-F, --form <name=content> #模拟用户按下submit按钮后填充的表单。 #该情况让curl 可使用Content-Type multipart/form-data POST数据。也可以上传二进制文件等。 # @文件名:使一个文件作为文件上传附加在post中。 # <文件名:从文件中获取该文本字段的内容。 #将密码文件发送到服务器,其中“password”是表单字段的名称,/etc/passwd将作为输入: curl -F password=@/etc/passwd www.mypasswords.com #可以使用 ‘type=’ 告诉curl使用什么 Content-Type ,方法类似于: curl -F "web=@index.html;type=text/html" url.com curl -F "name=daniel;type=text/foo" url.com #可以通过设置 filename= 更改本地上传的文件名,如下: curl -F "file=@localfile;filename=nameinpost" url.com #如果文件名/路径包括 ‘,’ 或 ‘;’ ,必须用双引号括起来:最外层可用单引号或双引号,这个选项可以多次使用。 curl -F "file=@\"localfile\";filename=\"nameinpost\"" url.com curl -F 'file=@"localfile";filename="nameinpost"' url.com #--form-string <name=string> #(HTTP)类似于 --form,只是命名参数的value字符串按字面意思使用。 #在值中以 ‘@’ 和 ‘<’ 开头的字符,以及 ‘;type=’ 字符串没有特殊的含义。 #如果字符串值有可能意外触发 --form 的 “@” 或 “<” 特性,请优先使用此选项。 #GET提交 直接写url里面 curl "http://test.com/a.php?param1=aaa¶m2=bbb" #POST提交 通过 --data/-d 方式指定使用POST方式传递数据 #(注意:如果键值对只有一个的话,可以不写双引号,但是如果有多个键值对,必须加上双引号,键值对之间用&连接) curl -d "key=value&key=value" "url" curl --data "key=value&key=value" "url"