Curl用法

curl用法示例(网络转载)
1)
 

 curl http://www.yahoo.com
  
回车之后,www.yahoo.comhtml就稀里哗啦地显示在屏幕上了~~~~~

2)
  
curl的内置option,存下http的结果,用这个option: -o
  curl -o page.html http://www.yahoo.com
  
可以看到屏幕上出现一个下载页面进度指示。等进展到100%,自然就OK

3)
  
使用curl的时候,用这个option可以指定http访问所使用的proxy服务器及其端口: -x
  curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com

4)
  
访问有些网站的时候使用cookie来记录session信息。
  
IE/NN这样的浏览器,当然可以轻易处理cookie信息..
  option: -D <– 
这个是把httpresponse里面的cookie信息存到一个特别的文件中去
  curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txthttp://www.yahoo.com
  
这样,当页面被存到page.html的同时,cookie信息也被存到了cookie0001.txt

5

  
那么,下一次访问的时候,如何继续使用上次留下的cookie信息呢?要知道,很多网站都是靠监视你的cookie信息,
  
来判断你是不是不按规矩访问他们的网站的。
  
这次我们使用这个option来把上次的cookie信息追加到http request里面去: -b
  curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -bcookie0001.txt http://www.yahoo.com
  
这样,我们就可以几乎模拟所有的IE操作,去访问网页了!

6

  
有些网站总要我们使用某些特定的浏览器去访问他们,有时候更过分的是,还要使用某些特定的版本~~~~
  
好在curl给我们提供了一个有用的option,可以让我们随意指定自己这次访问所宣称的自己的浏览器信息: -A
  curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT5.0)" -x 123.45.67.89:1080 -o page.html -D cookie0001.txthttp://www.yahoo.com
  
这样,服务器端接到访问的要求,会认为你是一个运行在Windows 2000上的IE6.0,其实也许你用的是苹果机呢!
  
"Mozilla/4.73[en] (X11; U; Linux 2.2; 15 i686"则可以告诉对方你是一台PC上跑着的Linux,用的是Netscape 4.73 .

7

  
另外一个服务器端常用的限制方法,就是检查http访问的referer。比如你先访问首页,再访问里面所指定的下载页,这第二次访问的referer 址就是第一次访问成功后的页面地址。这样,服务器端只要发现对下载页面某次访问的referer地址不是首页的地址,就可以断定那是个盗链了~~~~~
  
幸好curl给我们提供了设定refereroption -e
  curl -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT5.0)" -x 123.45.67.89:1080 -e "mail.yahoo.com" -o page.html-D cookie0001.txt http://www.yahoo.com
  
这样,就可以骗对方的服务器,你是从mail.yahoo.com点击某个链接过来的了.

8

  
写着写着发现漏掉什么重要的东西了!—–利用curl 下载文件
  
刚才讲过了,下载页面到一个文件里,可以使用 -o,下载文件也是一样。
  
比如, curl -o 1.jpghttp://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
  
这里教大家一个新的option -O
  
大写的O,这么用: curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
  
这样,就可以按照服务器上的文件名,自动存在本地了!
  
再来一个更好用的。
  
如果screen1.JPG以外还有screen2.JPGscreen3.JPG….screen10.JPG需要下载,难不成还要让我们写一个script来完成这些操作?
  
不干!
  
curl里面,这么写就可以了:
  curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG

9

  
再来,继续讲解下载!
  curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG
  
这样产生的下载,就是
  ~zzh/001.JPG
  ~zzh/002.JPG
  …
  ~zzh/201.JPG
  ~nick/001.JPG
  ~nick/002.JPG
  …
  ~nick/201.JPG
  
由于zzh/nick下的文件名都是001002…201,下载下来的文件重名,后面的把前面的文件都给覆盖掉了~~~
  
没关系,我们还有更狠的!
  curl -o #2_#1.jpghttp://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG
  –
这是…..自定义文件名的下载?
  –
对头,呵呵!
  #1
是变量,指的是{zzh,nick}这部分,第一次取值zzh,第二次取值nick
  #2
代表的变量,则是第二段可变部分—[001-201],取值从001逐一加到201
  
这样,自定义出来下载下来的文件名,就变成了这样:
  
原来: ~zzh/001.JPG—>下载后: 001-zzh.JPG
  
原来: ~nick/001.JPG—>下载后: 001-nick.JPG
  
这样一来,就不怕文件重名啦.

10

  
继续讲下载
  
我们平时在windows平台上,flashget这样的工具可以帮我们分块并行下载,还可以断线续传。
  curl
在这些方面也不输给谁.
  
比如我们下载screen1.JPG中,突然掉线了,我们就可以这样开始续传
  curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG
  
当然,你不要拿个flashget下载了一半的文件来糊弄我~~~~别的下载软件的半截文件可不一定能用哦~~~
  
分块下载,我们使用这个option就可以了: -r
  
举例说明
  
比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3要下载(赵老师的电话朗诵)
  
我们就可以用这样的命令:
  curl -r 0-10240 -o "zhao.part1"http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
  curl -r 10241-20480 -o "zhao.part1"http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
  curl -r 20481-40960 -o "zhao.part1"http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &\
  curl -r 40961- -o "zhao.part1"http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3
  
这样就可以分块下载啦。
  
不过你需要自己把这些破碎的文件合并起来
  
如果你用UNIX或苹果,用 cat zhao.part* > zhao.mp3就可以
  
如果用的是Windows,用copy /b来解决吧,呵呵
  
上面讲的都是http协议的下载,其实ftp也一样可以用。
  curl -u name:passwd ftp://ip:port/path/file
  
或者大家熟悉的
  curl ftp://name:passwd@ip:port/path/file

11)
  
说完了下载,接下来自然该讲上传咯
  
上传的option -T
  
比如我们向ftp传一个文件: curl -T localfile -u name:passwdftp://upload_site:port/path/
  
当然,向http服务器上传文件也可以
  
比如 curl -Tlocalfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi
  注意,这时候,使用的协议是HTTPPUT method
  
刚才说到PUT,嘿嘿,自然让老服想起来了其他几种methos还没讲呢!
  GET
POST都不能忘哦。
  http
提交一个表单,比较常用的是POST模式和GET模式
  GET
模式什么option都不用,只需要把变量写在url里面就可以了
  
比如:
  curlhttp://www.yahoo.com/login.cgi?user=nickwolfe&password=12345
  
POST模式的option则是 -d
  
比如,curl -d"user=nickwolfe&password=12345" http://www.yahoo.com/login.cgi
  
就相当于向这个站点发出一次登陆申请~~~~~
  
到底该用GET模式还是POST模式,要看对面服务器的程序设定。
  
一点需要注意的是,POST模式下的文件上的文件上传,比如
  <form method="POST"enctype="multipar/form-data"action="http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi">
  <input type=file name=upload>
  <input type=submit name=nick value="go">
  </form>
  
这样一个HTTP表单,我们要用curl进行模拟,就该是这样的语法:
  curl -F upload=@localfile -F nick=gohttp://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi
  curl
还有很多很多技巧和用法
  
比如 https的时候使用本地证书,就可以这样
  curl -E localcert.pem https://remote_server
  
再比如,你还可以用curl通过dict协议去查字典~~~~~
  curl dict://dict.org/d:computer

   curl 实际上是一个文件下载器,可以用curl去构造各种各样的http请求,在linux环境下获取各种资源。

     -x 指定访问IP与端口号

例:curl -x 192.168.1.1:80image.qq.com/logo.gif

指定IP192.168.1.1端口号为80来取imge.qq.com/logo.gif文件

     -I 仅仅取文件的http头部,输入此参数,curl会构造一个head请求来请求数据

     -b "cookie" 此参数用来构造一个携带cookie的请求,主要用于一些网站使用cookie做验证的文件!例如获取登陆后的一些设置了权限的文件!

    

如果一个网站设置了防盗链,我是指一般的防盗链,用referer做的防盗链,就可以使用-e来设置


但是有些东西是构造了也没用的,比如说keepalivegziphttp版本号等等,这些的构造就需要一些特殊命令

例如:构造http1.0的请求头部就使用 -0 即可,默认使用http1.1,使用接受压缩数据则用 --compressed

设定keepalive超时连接时间用 curl --connect-timeout 1100去测试下www.cnn.com 可以感受到超时的快感。

curl 还有一个非常有用的功能就是反馈时间,连接时间、下载时间

curl -w %{time_connect}:%{time_starttransfer}:%{time_total} -s-o /dev/null

这条命令可以输出连接时间、传输时间、总时间

curl里还有很多时间变量可以引用,time_namelookuptime_pretransfer time_starttransfer 等等

 



1.访问http页面内容,输出到标准输出 curl http://www.neocanable.com 2.生成文件 curl -o index.html http://www.neocanable.com 以远程文件名保存 curl -O http://www.neocanable.com 参数-o为输出到某个文件,上面的命令等同于wget http://www.neocanable.com或者curl http://www.neocanable.com > index.html 3.添加proxy curl -x xxx.xxx.xxx.xxx http://www.neocanable.com 通过代理ip访问网页 4.添加浏览器信息 通常服务器的日志会记录客户端浏览器的信息 curl -A “浏览器信息” http://www.neocanable.com 5.批量下载文件 curl http://www.xxx.com/action/[1-100].html > /dev/null 这个最适合爬自己网站的缓存了 文件下载后重新命名和类正则使用,下载后的文件是demo1-001.html curl -o #1_#2 http://www.xxx.com/~{demo1,demo2}/[1-100].html 创建需要的目录 curl -o –create-dirs http://www.xxx.com/~{demo1,demo2}/[1-100].html 6.分块下载 curl -r 0-1024 http://www.xxx.com/aa.zip curl -r 1025- http://www.xxx.com/aa.zip 先下1M,然后再下剩下的 7.curl ftp 访问ftp地址 curl -u username:password ftp://www.xxx.com curl -u ftp://www.xxx.com 添加端口 curl -u username:password -P8899 ftp://www.xxx.com 上传文件到ftp curl -T /home/neo/demo.jpg -u username:password ftp://www.xxx.com 8.测试参数 测试站点相应时间 curl -o /dev/null -s -w %{time_connect}:%{time_starttransfer}:%{time_total} www.google.com 查看http_code curl -o /dev/null -s -w %{http_code} http://www.neocanable.com 网页或文件大小 curl -o /dev/null -s -w %{size_header} http://www.neocanable.com http_code:http返回类似404,200,500等 time_total:总相应时间 time_namelookup:域名解析时间 time_connect:连接到目标地址耗费的时间 time_pretransfer:从执行到开始传输文件的时间间隔 time_starttransfer:从执行到开始传输文件的时间间隔 size_download:下载网页或文件大小 size_upload:上传文件大小 size_header:响应头 size_request:发送请求参数大小 speed_download:传输速度 speed_upload:平均上传速度 content_type:下载文件类型. (Added in 7.9.5) 9.post和get请求 get请求 curl “param1=name&params2=pass” http://www.xxx.com post请求 curl -d “param1=name&params2=pass” http://www.xxx.com 10.响应超时 curl -m 40 http://www.xxx.com curl –timeout 40 http://www.xxx.com 11.破解网站的防盗链 curl -e “http://www.a.net” http://www.b.net/acion 12.网站头部信息 curl -I http://www.neocanable.com 13.更总url跳转 curl -L http://url.cn/2yQFfd 14.正确的给url编码 curl –data-urlencode http://www.xxx.com/action?name=张三&sex=男 15.限制url的传输速度 curl –limit-rate http://www.xxx.com/action 16.限制下载文件大小 curl –max-filesize 1024 http://www.xxx.com/action 超过1M将不执行操作,并且返回出错 17.curl错误代码 1:未支持的协议。此版cURL不支持这一协议。 2:初始化失败。 3:URL格式错误。语法不正确。 5:无法解析代理。无法解析给定代理主机。 6:无法解析主机。无法解析给定的远程主机。 7:无法连接到主机。 8:FTP非正常的服务器应答。cURL无法解析服务器发送的数据。 9:FTP访问被拒绝。服务器拒绝登入或无法获取您想要的特定资源或目录。最有可能的是您试图进入一个在此服务器上不存在的目录。 11:FTP 非正常的PASS回复。cURL无法解析发送到PASS请求的应答。 13:FTP 非正常的的PASV应答,cURL无法解析发送到PASV请求的应答。 14:FTP非正常的227格式。cURL无法解析服务器发送的227行。 15:FTP无法连接到主机。无法解析在227行中获取的主机IP。 17:FTP无法设定为二进制传输。无法改变传输方式到二进制。 18:部分文件。只有部分文件被传输。 19:FTP不能下载/访问给定的文件, RETR (或类似)命令失败。 21:FTP quote错误。quote命令从服务器返回错误。 22:HTTP 找不到网页。找不到所请求的URL或返回另一个HTTP 400或以上错误。此返回代码只出现在使用了-f/–fail选项以后。 23:写入错误。cURL无法向本地文件系统或类似目的写入数据。 25:FTP 无法STOR文件。服务器拒绝了用于FTP上传的STOR操作。 26:读错误。各类读取问题。 27:内存不足。内存分配请求失败。 28:操作超时。到达指定的超时期限条件。 30:FTP PORT失败。PORT命令失败。并非所有的FTP服务器支持PORT命令,请尝试使用被动(PASV)传输代替! 31:FTP无法使用REST命令。REST命令失败。此命令用来恢复的FTP传输。 33:HTTP range错误。range “命令”不起作用。 34:HTTP POST错误。内部POST请求产生错误。 35:SSL连接错误。SSL握手失败。 36:FTP 续传损坏。不能继续早些时候被中止的下载。 37:文件无法读取。无法打开文件。权限问题? 38:LDAP 无法绑定。LDAP绑定(bind)操作失败。 39:LDAP 搜索失败。 41:功能无法找到。无法找到必要的LDAP功能。 42:由回调终止。应用程序告知cURL终止运作。 43:内部错误。由一个不正确参数调用了功能。 45:接口错误。指定的外发接口无法使用。 47:过多的重定向。cURL达到了跟随重定向设定的最大限额跟 48:指定了未知TELNET选项。 49:不合式的telnet选项。 51:peer的SSL证书或SSH的MD5指纹没有确定。 52:服务器无任何应答,该情况在此处被认为是一个错误。 53:找不到SSL加密引擎。 54:无法将SSL加密引擎设置为默认。 55:发送网络数据失败。 56:在接收网络数据时失败。 58:本地证书有问题。 59:无法使用指定的SSL密码。 60:peer证书无法被已知的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证书出现问题(路径?访问权限? ) 。 78:URL中引用的资源不存在。 79:SSH会话期间发生一个未知错误。 80:未能关闭SSL连接。 82:无法加载CRL文件,丢失或格式不正确(在7.19.0版中增加 ) 。 83:签发检查失败(在7.19.0版中增加 ) 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值