1、下载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
   | # 要注意-O这里后面的url要具体到某个文件,不然抓不下来 # 指定输出文件名 curl -o dodo1.jpg http:www.linux.com/dodo1.JPG # 不指定输出名 curl -O http://www.linux.com/dodo1.JPG # 正则下载多个文件 curl -O http://www.linux.com/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  #这样就可以查看dodo1.JPG的内容了
  # 通过ftp下载文件,curl提供两种从ftp中下载的语法 curl -O -u 用户名:密码 ftp://www.linux.com/dodo1.JPG curl -O ftp://用户名:密码@www.linux.com/dodo1.JPG
  # 下载,显示进度条(option:-#)或不显示进度条(option:-s) curl -# -O http://www.linux.com/dodo1.JPG curl -s -O http://www.linux.com/dodo1.JPG
  # 断点续传(-C `<offset>`),从文件头的指定位置开始继续下载/上传;offset续传开始的位置,如果offset值为“-”,curl会自动从文件中识别起始位置开始传输; curl -# -o centos6.8.iso -C - http://mirrors.aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso curl -C -O http://www.linux.com/dodo1.JPG
   | 
 
2、上传文件
1
   | curl -T dodo1.JPG -u 用户名:密码 ftp://www.linux.com/img/
   | 
 
3、伪造来源页面|伪造referer|盗链 (option:-e)
很多服务器会检查http访问的referer从而来控制访问。
比如:
先访问首页,然后再访问首页中的邮箱页面,这里访问邮箱的referer地址就是访问首页成功后的页面地址,
如果服务器发现对邮箱页面访问的referer地址不是首页的地址,就断定那是个盗连了
1 2
   | #伪造为www.linux.com点击某个链接过来的 curl -e "www.linux.com" http://mail.linux.com
   | 
 
4、伪造代理设备(模仿浏览器)
有些网站需要使用特定的浏览器去访问他们,有些还需要使用某些特定的版本。curl内置option:-A可以让我们指定浏览器去访问网站
1
   | curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com
   | 
 
5、设置http请求头
1 2
   | 设置http请求头(或option:-H或option:--head) curl -H "Cache-Control:no-cache"  http://aiezu.com
   | 
 
6、设置代理
1 2 3 4
   | # 指定proxy服务器以及其端口(option::-x) # 很多时候上网需要用到代理服务器(比如是使用代理服务器上网或者因为使用curl别人网站而被别人屏蔽IP地址的时候), # 幸运的是curl通过使用内置option:-x来支持设置代理 curl -x 192.168.100.100:1080 http://www.linux.com
   | 
 
7、http响应头
查看http响应头(option:-I)
1
   | curl -I  http://www.baidu.com
   | 
 
1 2 3 4 5 6 7 8 9 10
   | HTTP/1.1 200 OK Date: Fri, 25 Nov 2016 16:45:49 GMT Server: Apache Set-Cookie: rox__Session=abdrt8vesprhnpc3f63p1df7j4; path=/ Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Vary: Accept-Encoding Content-Type: text/html; charset=utf-8
 
   | 
 
1 2
   | # 执行后cookie信息就被存到了cookied.txt里面了 curl -D cookied.txt http://www.linux.com
   | 
 
注意:-c(小写)产生的cookie和-D里面的cookie是不一样的。
8、发送表单数据
1
   | curl -F "pic=@logo.png" -F "site=aiezu"  http://www.baidu.com/
   | 
 
9、cookie
发送cookie(option:-b)
1 2 3 4
   | # 指定单条cookie curl -b "user=admin"  http://www.linux.com # 指定文件 curl -b cookiec.txt http://www.linux.com
   | 
 
保存http的response里面的cookie信息(option:-c)
执行后http的response里面的cookie信息就被存到了cookiec.txt里面了
1
   | curl -c cookiec.txt  http://www.linux.com
   | 
 
10、测试网址
1 2 3 4 5
   | # 测试一个网址是否可达 curl -v http://www.linux.com
  # 测试网页返回值(option:-w [format]) curl -o /dev/null -s -w %{http_code} www.linux.com
   | 
 
11、请求方式
其中, 分别等价于-F, -G -d, -P
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   | # -X POST = -F # -X GET = -G # -X PUT = -P # 默认携带请求头Content-Type: application/x-www-form-urlencoded curl -i -v -H '' -X POST -d '' http:www.test.com/a/b
  # 使用数据文件,data.txt文件内容param1=value1&m2=value2 curl -X POST -d "@data.txt" http://localhost:3000/data # 直接使用命令行传参 curl -H "Content-Type:application/x-www-form-urlencoded" -X POST -d "param1=value1&m2=value2" http://localhost:3000/data # 使用json文件:data.json内容如下:{"key1":"value1","key2":"value2"} curl -X POST -d "@data.json" http://localhost:3000/data # 直接使用命令行传参 curl -H "Content-type:application/json" -X POST -d "{\"app_key\":\"$appKey\",\"time_stamp\":\"$time\"}" http://www.test.com.cn/a/b # 传递文件 curl  -v -H "token: 222" -F "file=@/Users/fungleo/Downloads/401.png" localhost:8000/api/v1/upimg
  curl  -X POST "http://www.test.com/e/f" -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" \ -d "a=b" \ -d "c=d" \ -d "e=f" \ -d "g=h" # 参数"a=b#1&c=d"不能直接传递,特殊符号的用urlencode转换过来 curl -i -G -d "a=b%231&c=d" http://www.test.com/e/f
   | 
 
12、调试
curl -v可以显示一次http通信的整个过程,包括端口连接和http request头信息。
如果觉得还不够,那么下面的命令可以查看更详细的通信过程:
curl –trace output.txt www.baidu.com 或者 curl –trace-ascii output.txt www.baidu.com
运行后,请打开output.txt文件查看。
curl –trace output.txt  http://www.baidu.com
curl –trace-ascii output2.txt  http://www.baidu.com
curl –trace output3.txt –trace-time http://www.baidu.com
curl –trace-ascii output4.txt –trace-time http://www.baidu.com


举例:有需求每5分钟请求一次http://www.test.com/a/b生成一个日志文件。希望一月的日志(正确的和错误的)能写入一个日志文件
day=date +%F
logfile=’/var/logs/www.test.com_'`date +%Y%m`’.log’
/usr/bin/echo -e “\n\n[${day}] Start request \n “ >> ${logfile}
/bin/curl -v “http://www.test.com/a/b“ -d “ccccc” 1>> ${logfile} 2>> ${logfile} –trace-time
/usr/bin/echo -e “\n\n[${day}] End request\n” >> ${logfile}
13、显示抓取错误
curl -f http://www.linux.com/error