Linux下cURL使用教程之三:curl基本使用

在介绍完cURL简介和需要的HTTP协议概述之后。终于可以回归正题,进入curl的使用方法。

curl命令格式

基本的使用用法如下:
curl [选项] [URL...]

GET一个网页

curl http://www.baidu.com
网页源码将被打印出来。

-o/--output <file>指定保存目录

为便于后续处理,我们将网页内容保存在文件中:
curl -o stackeye.html http://www.stackeye.com
此时仍会显示进度条等信息。

-s/--silent静默模式

通过脚本结合curl可以实现很复杂的功能,而在脚本中调用curl,我们不需要进度条等信息。如执行:
curl -s -o stackeye.html http://www.stackeye.com
将不会显示任何信息。

-v/–verbose查看通信过程、调试。

这个参数可以清晰的查看到curl的通信过程,以便于调试,如执行:
curl -v http://www.baidu.com
返回结果如下,可以清晰的看到curl发出的HTTP请求及服务器返回的HTTP响应:

* About to connect() to www.baidu.com port 80 (#0)
* Trying 119.75.218.77... connected
* Connected to www.baidu.com (119.75.218.77) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.21.0 (i686-pc-linux-gnu) libcurl/7.21.0 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18
> Host: www.baidu.com
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Wed, 01 Aug 2012 12:39:15 GMT
< Server: BWS/1.0
< Content-Length: 8216
< Content-Type: text/html;charset=gbk
< Cache-Control: private
< Expires: Wed, 01 Aug 2012 12:39:15 GMT
< Set-Cookie: BAIDUID=AF0E3C36DBB60C0D7C29DE11705028D7:FG=1; expires=Wed, 01-Aug-42 12:39:15 GMT; path=/; domain=.baidu.com
< P3P: CP=" OTI DSP COR IVA OUR IND COM "
< Connection: Keep-Alive
<
<!doctype html>以下为HTML内容,略

以下所有命令都可以通过加入-v选项,查看具体通信过程。
更详细的调试信息可以使用–trace-ascii选项,如:
curl --trace-ascii debug.txt http://www.baidu.com

-A/–user-agent指定User-Agent字段

此选项字段用于指定HTTP请求头的User-Agent字段,即客户端(如浏览器)类型。
很多网站为了防止自动化程序采集,仅允许浏览器访问,最简单的办法就是通过User-Agent字段识别客户端类型做出处理。而如下命令:

curl -A  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
http://www.stackeye.com

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"为firefox的UserAgent值。
通过-A指定User-Agent字段,使curl伪装成Firefox,从而绕过网站的检测。
User-Agent字段可以通过抓包分析得到,或者通过chrome的Developer Tools、Firefox的Firebug等工具得到。
而如果一个网站对浏览器的限制也很严格的话,那我们甚至可以通过修改User-Agent伪装成百度蜘蛛或者googlebot突破限制,因为基于SEO的考虑,网站对搜索引擎蜘蛛的限制很小。

-e/–referer设置Referer

此选项字段用于指定HTTP请求头中的Referer字段,即来源网页。
为了防盗链,很多网页尤其是图片等可下载资源会检测Referer字段,对于非自己站内的来源全部屏蔽掉,此时我们就需要这个参数。
通过执行:

curl -A  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
-e http://www.baidu.com http://www.stackeye.com
http://www.stackeye.com将检测到来源网站为http://www.baidu.com

cookie使用

cookie的介绍参考上一篇。
我们登录网站后,为保持登录状态,需要使用cookie信息。

-D/–dump-header 保存协议头部信息

-D/--dump-header <file>保存协议头部信息
头部信息中包含最常使用的cookie信息,如执行:

curl -A  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
-e http://www.baidu.com -D stackeyecookie.txt http://www.stackeye.com

会将头部信息保存至stackeyecookie.txt中。

-b/–cookie 指定cookie

-b/--cookie <name=data>/<file>指定cookie
-b后可直接加-D保存的文件,curl会自动从中读取出cookie值,而且-b选项不会修改此文件。如执行:

curl -A  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
-e http://www.baidu.com -b stackeyecookie.txt http://www.stackeye.com

会自动将stackeyecookie.txt中cookie信息附加至HTTP请求头中。

结合-D和-b参数,即可完成cookie的保存和后续使用。

cookie的形式就是“属性:值”对形式,-b后可直接以“属性=值”的形式给出cookie,当有多个属性时以分号间隔且包含在双引号中。如执行:

curl -A  "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
-b "user=Adeploy;pass=password" http://www.stackeye.com

会将cookie信息user=Adeploy;pass=password附加在HTTP请求头中。

Redirects重定向

打开某些网页,网页会显示“ 3XX Moved Permanently ”,即网页被移动到其他位置,新位置一般由HTTP响应头中的Location字段给出。
重定向一般是因为网站结构调整后,避免用户访问原来页面出现404错误。
而另一类常见的用法就是在登陆成功后,网页显示成功信息,然后将用户重定向至内容页面。
-L/--location选项可以自动跟踪重定向。

总结

本篇只介绍简单的curl使用选项,下篇将结合实例具体说明。