<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[命令行CURL教程]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 30 Jun 2008 03:50:46 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	作者: nickwolfe@CCF<br/><br/>CURL? 嗯，说来话长了~~~~<br/><br/>这东西现在已经是苹果机上内置的命令行工具之一了，可见其魅力之一斑<br/><br/>1)<br/>二话不说，先从这里开始吧！<br/><br/>curl http://www.yahoo.com<br/>回车之后，www.yahoo.com 的html就稀里哗啦地显示在屏幕上了~~~~~<br/><br/>2)<br/>嗯，要想把读过来页面存下来，是不是要这样呢？<br/><br/>curl http://www.yahoo.com &gt; page.html<br/>当然可以，但不用这么麻烦的！<br/>用curl的内置option就好，存下http的结果，用这个option: -o<br/><br/>curl -o page.html http://www.yahoo.com<br/>这样，你就可以看到屏幕上出现一个下载页面进度指示。等进展到100%，自然就OK咯<br/><br/>3)<br/>什么什么？！访问不到？肯定是你的proxy没有设定了。<br/>使用curl的时候，用这个option可以指定http访问所使用的proxy服务器及其端口： -x<br/><br/>curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com<br/>4)<br/>访问有些网站的时候比较讨厌，他使用cookie来记录session信息。<br/>像IE/NN这样的浏览器，当然可以轻易处理cookie信息，但我们的curl呢？.....<br/>我们来学习这个option: -D &lt;-- 这个是把http的response里面的cookie信息存到一个特别的文件中去<br/><br/>curl -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com<br/>这样，当页面被存到page.html的同时，cookie信息也被存到了cookie0001.txt里面了<br/><br/>5）<br/>那么，下一次访问的时候，如何继续使用上次留下的cookie信息呢？要知道，很多网站都是靠监视你的cookie信息，<br/>来判断你是不是不按规矩访问他们的网站的。<br/>这次我们使用这个option来把上次的cookie信息追加到http request里面去： -b<br/><br/>curl -x 123.45.67.89:1080 -o page1.html -D cookie0002.txt -b cookie0001.txt http://www.yahoo.com<br/>这样，我们就可以几乎模拟所有的IE操作，去访问网页了！<br/><br/>6）<br/>稍微等等~~~~~我好像忘记什么了~~~~~<br/>对了！是浏览器信息~~~~<br/><br/>有些讨厌的网站总要我们使用某些特定的浏览器去访问他们，有时候更过分的是，还要使用某些特定的版本~~~~<br/>NND，哪里有时间为了它去找这些怪异的浏览器呢！？<br/><br/>好在curl给我们提供了一个有用的option，可以让我们随意指定自己这次访问所宣称的自己的浏览器信息： -A<br/><br/>curl -A &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)&quot; -x 123.45.67.89:1080 -o page.html -D cookie0001.txt http://www.yahoo.com<br/>这样，服务器端接到访问的要求，会认为你是一个运行在Windows 2000上的IE6.0，嘿嘿嘿，其实也许你用的是苹果机呢！<br/><br/>而&quot;Mozilla/4.73 [en] (X11; U; Linux 2.2; 15 i686&quot;则可以告诉对方你是一台PC上跑着的Linux，用的是Netscape 4.73，呵呵呵<br/><br/>7）<br/>另外一个服务器端常用的限制方法，就是检查http访问的referer。比如你先访问首页，再访问里面所指定的下载页，这第二次访问的referer地址就是第一次访问成功后的页面地址。这样，服务器端只要发现对下载页面某次访问的referer地址不 是首页的地址，就可以断定那是个盗连了~~~~~<br/><br/>讨厌讨厌~~~我就是要盗连~~~~~！！<br/>幸好curl给我们提供了设定referer的option： -e<br/><br/>curl -A &quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)&quot; -x 123.45.67.89:1080 -e &quot;mail.yahoo.com&quot; -o page.html -D cookie0001.txt http://www.yahoo.com<br/>这样，就可以骗对方的服务器，你是从mail.yahoo.com点击某个链接过来的了，呵呵呵<br/><br/>8）<br/>写着写着发现漏掉什么重要的东西了！----- 利用curl 下载文件<br/><br/>刚才讲过了，下载页面到一个文件里，可以使用 -o ，下载文件也是一样。<br/>比如， <br/><br/>curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG<br/>这里教大家一个新的option： -O<br/>大写的O，这么用： <br/><br/>curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG<br/>这样，就可以按照服务器上的文件名，自动存在本地了！<br/><br/>再来一个更好用的。<br/>如果screen1.JPG以外还有screen2.JPG、screen3.JPG、....、screen10.JPG需要下载，难不成还要让我们写一个script来完成这些操作？<br/>不干！<br/>在curl里面，这么写就可以了：<br/><br/>curl -O http://cgi2.tky.3web.ne.jp/~zzh/screen[1-10].JPG<br/>呵呵呵，厉害吧？！~~~<br/><br/>9）<br/>再来，我们继续讲解下载！<br/><br/>curl -O http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG<br/>这样产生的下载，就是<br/>~zzh/001.JPG<br/>~zzh/002.JPG<br/>...<br/>~zzh/201.JPG<br/>~nick/001.JPG<br/>~nick/002.JPG<br/>...<br/>~nick/201.JPG<br/><br/>够方便的了吧？哈哈哈<br/><br/>咦？高兴得太早了。<br/>由于zzh/nick下的文件名都是001，002...，201，下载下来的文件重名，后面的把前面的文件都给覆盖掉了~~~<br/><br/>没关系，我们还有更狠的！<br/><br/>curl -o #2_#1.jpg http://cgi2.tky.3web.ne.jp/~{zzh,nick}/[001-201].JPG<br/>--这是.....自定义文件名的下载？<br/>--对头，呵呵！<br/><br/>#1是变量，指的是{zzh,nick}这部分，第一次取值zzh，第二次取值nick<br/>#2代表的变量，则是第二段可变部分---[001-201]，取值从001逐一加到201<br/>这样，自定义出来下载下来的文件名，就变成了这样：<br/>原来： ~zzh/001.JPG ---&gt; 下载后： 001-zzh.JPG<br/>原来： ~nick/001.JPG ---&gt; 下载后： 001-nick.JPG<br/><br/>这样一来，就不怕文件重名啦，呵呵<br/><br/>9）<br/>继续讲下载<br/>我们平时在windows平台上，flashget这样的工具可以帮我们分块并行下载，还可以断线续传。<br/>curl在这些方面也不输给谁，嘿嘿<br/><br/>比如我们下载screen1.JPG中，突然掉线了，我们就可以这样开始续传<br/><br/>curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG<br/>当然，你不要拿个flashget下载了一半的文件来糊弄我~~~~别的下载软件的半截文件可不一定能用哦~~~<br/><br/>分块下载，我们使用这个option就可以了： -r<br/>举例说明<br/>比如我们有一个http://cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 要下载（赵老师的电话朗诵 :D ）<br/>我们就可以用这样的命令：<br/><br/>curl -r 0-10240 -o &quot;zhao.part1&quot; http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &amp;<br/>curl -r 10241-20480 -o &quot;zhao.part1&quot; http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &amp;<br/>curl -r 20481-40960 -o &quot;zhao.part1&quot; http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3 &amp;<br/>curl -r 40961- -o &quot;zhao.part1&quot; http:/cgi2.tky.3web.ne.jp/~zzh/zhao1.mp3<br/>这样就可以分块下载啦。<br/>不过你需要自己把这些破碎的文件合并起来<br/>如果你用UNIX或苹果，用 cat zhao.part* &gt; zhao.mp3就可以<br/>如果用的是Windows，用copy /b 来解决吧，呵呵<br/><br/>上面讲的都是http协议的下载，其实ftp也一样可以用。<br/>用法嘛，<br/><br/>curl -u name:passwd ftp://ip:port/path/file<br/>或者大家熟悉的<br/><br/>curl ftp://name:passwd@ip:port/path/file<br/>10)<br/>说完了下载，接下来自然该讲上传咯<br/>上传的option是 -T<br/><br/>比如我们向ftp传一个文件： <br/><br/>curl -T localfile -u name:passwd ftp://upload_site:port/path/<br/>当然，向http服务器上传文件也可以<br/>比如 <br/><br/>curl -T localfile http://cgi2.tky.3web.ne.jp/~zzh/abc.cgi<br/>注意，这时候，使用的协议是HTTP的PUT method<br/><br/>刚才说到PUT，嘿嘿，自然让老服想起来了其他几种methos还没讲呢！<br/>GET和POST都不能忘哦。<br/><br/>http提交一个表单，比较常用的是POST模式和GET模式<br/><br/>GET模式什么option都不用，只需要把变量写在url里面就可以了<br/>比如：<br/><br/>curl http://www.yahoo.com/login.cgi?user=nickwolfe&amp;password=12345<br/>而POST模式的option则是 -d<br/><br/>curl -d &quot;user=nickwolfe&amp;password=12345&quot; http://www.yahoo.com/login.cgi<br/>就相当于向这个站点发出一次登陆申请~~~~~<br/><br/>到底该用GET模式还是POST模式，要看对面服务器的程序设定。<br/><br/>一点需要注意的是，POST模式下的文件上的文件上传，比如<br/><br/>&lt;form method=&quot;POST&quot; enctype=&quot;multipar/form-data&quot; action=&quot;http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi&quot;&gt;<br/>&lt;input type=file name=upload&gt;<br/>&lt;input type=submit name=nick value=&quot;go&quot;&gt;<br/>&lt;/form&gt;<br/>这样一个HTTP表单，我们要用curl进行模拟，就该是这样的语法：<br/><br/>curl -F upload=@localfile -F nick=go http://cgi2.tky.3web.ne.jp/~zzh/up_file.cgi<br/>罗罗嗦嗦讲了这么多，其实curl还有很多很多技巧和用法<br/>比如 https的时候使用本地证书，就可以这样<br/><br/>curl -E localcert.pem https://remote_server<br/>再比如，你还可以用curl通过dict协议去查字典~~~~~<br/><br/>curl dict://dict.org/d:computer<br/>今天就先讲到这里吧，呵呵。疯狂的curl功能，需要你---一起来发掘。<br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 命令行CURL教程]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>