curl是非常强大命令,提供了一堆非常有用的功能,包含用户代理、用户认证、ftp上传下载、HTTP POST、SSL连接、cookie支持、断点续传…
基本用法
1 | curl [option] [url] |
保存访问网页
-o 将文件保存为命令行中指定的文件名的文件中
-O 使用URL中默认的文件名保存文件到本地,这里的URL需要具体到某个文件,不然抓不下来
1 | # ok |
测试网页返回值
-s/–silent 静音模式 不输出任何东西,如果没有这个选项会有进度条输出。
1 | % Total % Received % Xferd Average Speed Time Time Time Current |
-w/–write-out [format] 等到前面的步骤完成
1 | curl -o /dev/null -s -w "%{http_code}\n" www.baidu.com |
/dev/null是一个黑洞,用于丢弃不需要的数据输出,或者用于输入流的空文件。
上述命令等-o执行完毕后再来运行-w的内容
-f / –fail 连接失败时只返回状态码,不返回html页面
1 | curl -f https://www.baidu.com/error |
使用HTTP代理
-x/–proxy <host[:port]>指定代理服务器的IP和侦听端口
1 | curl -x 192.168.100.198:8888 www.baidu.com |
cookie
1.将cookie信息保存
-c / –cookie-jar <file>
使用用户名和密码登录,并将cookie信息存储到文件中(发的是post请求)
1 | curl -d "name=123&password=456" http://192.168.100.182/index.php -c cookie |
2.读取本地的cookie文件
-b / –cookie <name=string/file>
1 | curl http://192.168.100.182/index.php -b cookie |
3.直接指定cookie
–cookie
1 | curl --cookie "name=123" http://192.168.100.182/index.php |
设置用户代理(模仿浏览器)
-A / –user-agent
1 | curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" www.baidu.com |
浏览器端会认为是使用IE8.0去访问的
伪造refer(盗链)
也就是伪造从某个链接跳转过来
-e / –referer
1 | curl -e "www.baidu.com" https://image.baidu.com --head |
下载文件
1 | curl -o file_name specific_URL |
1.循环下载
1 | # justin1.png-justin5.png全部下载下来 |
2.下载重命名
1 | # 先去下载justin下的justin1-justin5.png文件,然后下载peng下的justin1-justin5.png文件,第二次下载会覆盖第一次下载 |
1 | # 第一次的文件名字justin_justin1.png形式,第二个peng_justin1.png形式 |
3.分块下载
-r / –range
1 | curl -r 0-100 -o justin_part1.png http://www.51cto.com/justin.png |
4.通过ftp下载
-u / –user <user[:password]>使用用户名和密码认证
-E 采用证书认证
1 | # 使用用户名和密码认证的两种形式 |
5.下载进度条
-# / –progress-bar
1 | curl -O https://www.baidu.com/index.html -# |
-s 不会显示下载进度条
1 | curl -s -O https://www.baidu.com/index.html |
6.断点续传
-C / –continue-at
1 | curl -C -O http://www.baidu.com/justin.png |
上传文件
1 -T / –upload-file <file> 上传文件
1 | curl -T justin.png -u justin:peng ftp://www.baidu.com/img/ |
2 -F 表单提交
该命令以Content-Type:multipart/format-data的形式向服务器post数据,允许提交二进制文件。使用@前缀指定提交内容为一个文件也可以使用<符号来提交文件中的内容。
1 | curl -F prefile=@portrait.jpg https://example.com/upload.cgi |
上传图片,图片的表单名profile,内容为portrait.jpg的二进制
3 -B / –user-ascii 使用ASCII文本传输
HTTP请求方式
http定义的五种基本的与服务器交互的方式,GET, POST, PUT, DELETE, HEAD。GET HEAD被称为安全方法,不会修改服务器数据。
-X 指定请求方法
POST请求
1.-d / –data <data>
1 | curl -X POST -d"name=123&password=456" http://192.168.100.182/index.php -v |
-v 可以显示一次http通信的整个过程,包含端口连接和http request头信息
2.数据头部
使用-d为POST方式向服务器发送数据,因此使用POST可以省略-X POST。使用-d时,头部类型将是Content-type:application/x-www-form-urlencoded方式发送数据,如果使用json形式数据,需要使用-H来进行指定
1 | curl -X POST -H"Content-Type:application/json" -d'{"data":"123","key":"456"}' http://192.168.100.182/index.php -v |
3.特殊字符转义
提交的参数值中含有特殊字符时需要先转义,比如空格需要转义为%20
使用–data-urlenccoded可以自动转义特殊字符
1 | curl --data-urlencoded "value 1" http://192.168.100.182/index.php -v |
4.请求时带上Cookie
1 | curl -X POST -H"Cookie:username=123" http://192.168.100.182/index.php -v |
–data-ascii <data> 使用ascii方式post数据
–data-binary <data> 使用二进制方式post数据
–connect-timeout <seconds> 设置最大请求时间
–create-dirs 建立本地目录的目录层次结构
GET请求
-G / –get
1 | curl -G -d "username=jsutin&pwd=123456" |
需要用户授权的页面,可以指定-u来提供用户名和密码进行授权
1 | curl -u username:password URL |
DELETE请求
1 | curl -l -X DELETE http://192.168.100.182/index.php -v |
-l / –list-only 列出ftp目录下的为文件名称