curl 命令

curl 命令

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

它可以被认为是一个命令行的浏览器

1、开放gzip求
curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte

2、监控网页的响应时间
curl -o /dev/null -s -w “time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n” “http://www.kklinux.com”

3. 监控网站可用性
curl -o /dev/null -s -w %{http_code} “http://www.kklinux.com”

4、以http1.0协议请求(默觉得http1.1) 
curl -0 ………….. 
      1)读取网页 
  $ curl linuxidc.com”>http://www.linuxidc.com 
  2)保存网页 
  $ curl http://www.linuxidc.com > page.html $ curl -o page.html http://www.linuxidc.com 
  3)使用的proxyserver及其port:-x 
  $ curl -x 123.45.67.89:1080 -o page.html http://www.linuxidc.com 
  4)使用cookie来记录session信息 
  $ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com 
option: -D 是把http的response里面的cookie信息存到一个特别的文件里去,这样,当页面被存到page.html的同一时候,cookie信息也被存到了cookie0001.txt里面了 
    5)那么,下一次訪问的时候,怎样继续使用上次留下的cookie信息呢? 
  使用option来把上次的cookie信息追加到http request里面去:-b 
  $ curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.linuxidc.com 

6)浏览器信息~~~~ 
任意指定自己这次訪问所宣称的自己的浏览器信息: -A
curl -A “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)” -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com 
这样,server端接到訪问的要求,会觉得你是一个执行在Windows 2000上的IE6.0,嘿嘿嘿。事实上或许你用的是苹果机呢! 
而”Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686″则能够告诉对方你是一台PC上跑着的Linux。用的是Netscape 4.73,呵呵呵 

7)
另外一个server端经常使用的限制方法,就是检查http訪问的referer。

比方你先訪问首页,再訪问里面所指定的下载页,这第二次訪问的referer地址就是第一次訪问成功后的页面地 
址。这样。server端仅仅要发现对下载页面某次訪问的referer地址不 是首页的地址,就能够断定那是个盗连了~~~~~ 
讨厌讨厌~~~我就是要盗连~~~~~!!
幸好curl给我们提供了设定referer的option: -e
curl -A “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)” -x 123.45.67.89:1080 -e “mail.yahoo.com” -o page.html -D cookie0001.txt http://www.yahoo.com 
这样,就能够骗对方的server,你是从mail.yahoo.com点击某个链接过来的了,呵呵呵 

8)curl 下载文件 
刚才讲过了。下载页面到一个文件中。能够使用 -o 。下载文件也是一样。

比方, curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
这里教大家一个新的option: -O
大写的O。这么用: curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
这样,就能够依照server上的文件名称。自己主动存在本地了!

 
再来一个更好用的。

假设screen1.JPG以外还有screen2.JPG、screen3.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下的文件名称都是001。002…,201。下载下来的文件重名,后面的把前面的文件都给覆盖掉了~~~ 
没关系。我们还有更狠的!

curl -o #2_#1.jpg http://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 
这样一来,就不怕文件重名啦,呵呵 

9)
继续讲下载
我们平时在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 要下载(赵老师的电话朗诵 :D )
我们就能够用这种命令:
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 
  
10)上传的option是 -T 
比方我们向ftp传一个文件: curl -T localfile -u name:passwd ftp://upload_site:port/path/ 
当然,向httpserver上传文件也能够
比方 curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi
注意,这时候。使用的协议是HTTP的PUT method 
刚才说到PUT,嘿嘿。自然让老服想起来了其它几种methos还没讲呢!

GET和POST都不能忘哦。

 
http提交一个表单,比較经常使用的是POST模式和GET模式 
GET模式什么option都不用,仅仅须要把变量写在url里面就能够了
比方:
curl http://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模式,要看对面server的程序设定。 
一点须要注意的是,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=go http://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 

今天为了检查全部刺猬主机上全部域名是否有备案.在使用wget不爽的情况下,找到了curl这个命令行流量器命令.发现其对post的调用还是蛮好的.特别有利于对提交信息及变 
更參数进行较验.对于我想将几十万域名到miibeian.gov.cn进行验证是否有备案信息非常实用.发现这篇文章非常不错,特为转贴. 
我的目标:
curl -d “cxfs=1&ym=xieyy.cn” http://www.miibeian.gov.cn/baxx_cx_servlet 
在出来的信息中进行过滤,提取备案号信息,并设置一个标识位.将域名。备案号及标识位入库 

用curl命令,post提交带空格的数据 
今天偶然遇到一个情况。我想用curl登入一个网页,无意间发现要post的数据里带空格。

比方username为”abcdef”,password为”abc def”。当中有一个空格,依照我曾经的方式提交: 
curl -D cookie -d “username=abcdef&password=abc def” http://login.xxx.com/提示登入失败。 

于是查看curl手冊man curl。找到: 
d/–data (HTTP) Sends the speci?ed data in a POST request to the HTTP server, in a way that can emulate as if a user has ?lled in a HTML form and pressed the 
submit button. Note that the data is sent exactly as speci?

ed with no extra processing (with all newlines cut off). The data is expected to be “url-encoded”. 
This will cause curl to pass the data to the server using the content-type application/x-www-form-urlencoded. Compare to -F/–form. If this option is used 
more than once on the same command line, the data pieces speci?

ed will be merged together with a separating &-letter. Thus, using ’-d name=daniel -d 
skill=lousy’ would generate a post chunk that looks like ’name=daniel&skill=lousy’. 
于是改用: 
curl -D cookie -d “username=abcdef” -d “password=abc efg” http://login.xxx.com/这样就能成功登入了。

 

(责任编辑:飘飞的夜)

 

Curl是Linux下一个非常强大的http命令行工具。其功能十分强大。

1) 二话不说,先从这里開始吧。

$ curl http://www.linuxidc.com

回车之后,www.linuxidc.com 的html就稀里哗啦地显示在屏幕上了    ~

2) 嗯,要想把读过来页面存下来。是不是要这样呢?

$ curl http://www.linuxidc.com > page.html

当然能够,但不用这么麻烦的!

用curl的内置option就好,存下http的结果。用这个option: -o

$ curl -o page.html http://www.linuxidc.com

这样,你就能够看到屏幕上出现一个下载页面进度指示。等进展到100%,自然就 OK咯

3) 什么什么?!訪问不到?肯定是你的proxy没有设定了。

使用curl的时候,用这个option能够指定http訪问所使用的proxyserver及其port: -x

$ curl -x 123.45.67.89:1080 -o page.html http://www.linuxidc.com

4) 訪问有些站点的时候比較讨厌,他使用cookie来记录session信息。

像IE/NN这种浏览器,当然能够轻易处理cookie信息,但我们的curl呢?…..

我们来学习这个option: -D <— 这个是把http的response里面的cookie信息存到一个特别的文件里去

$ curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.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 -b cookie0001.txt http://www.linuxidc.com

这样,我们就能够差点儿模拟全部的IE操作,去訪问网页了!

6)略微等等    ~我好像忘记什么了    ~

对了!

是浏览器信息

有些讨厌的站点总要我们使用某些特定的浏览器去訪问他们。有时候更过分的是。还要使用某些特定的版本号    NND。哪里有时间为了它去找这些怪异的浏览器呢!

好在curl给我们提供了一个实用的option,能够让我们任意指定自己这次訪问所宣称的自己的浏览器信息: -A

$ curl -A “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)” -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.linuxidc.com

这样,server端接到訪问的要求,会觉得你是一个执行在Windows 2000上的 IE6.0,嘿嘿嘿。事实上或许你用的是苹果机呢!

而”Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686″则能够告诉对方你是一台 PC上跑着的Linux。用的是Netscape 4.73,呵呵呵

7)另外一个server端经常使用的限制方法,就是检查http訪问的referer。比方你先訪问首页。再訪问里面所指定的下载页,这第二次訪问的 referer地址就是第一次訪问成功后的页面地址。这样。server端仅仅要发现对下载页面某次訪问的referer地址不是首页的地址。就能够断定那是个盗 连了    ~

讨厌讨厌 ~我就是要盗连    ~!

幸好curl给我们提供了设定referer的option: -e

$ curl -A “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)” -x 123.45.67.89:1080 -e “mail.linuxidc.com” -o page.html -D cookie0001.txt http://www.linuxidc.com

这样,就能够骗对方的server,你是从mail.linuxidc.com点击某个链接过来的了,呵呵呵

8)写着写着发现漏掉什么重要的东西了!

——- 利用curl 下载文件

刚才讲过了,下载页面到一个文件中。能够使用 -o 。下载文件也是一样。比方,

$ curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

这里教大家一个新的option: -O 大写的O,这么用:

$ curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG

这样,就能够依照server上的文件名称,自己主动存在本地了!

再来一个更好用的。

假设screen1.JPG以外还有screen2.JPG、screen3.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下的文件名称都是001,002…。201,下载下来的文件重名,后面的把前面的文件都给覆盖掉了 ~

没关系,我们还有更狠的!

$ curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG

—这是…..自己定义文件名称的下载? —对头,呵呵。

这样。自己定义出来下载下来的文件名称。就变成了这样:原来: ~zzh/001.JPG —-> 下载后: 001-zzh.JPG 原来: ~nick/001.JPG —-> 下载后: 001-nick.JPG

这样一来,就不怕文件重名啦,呵呵

终点

版权声明:本文博主原创文章。博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116887.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号