一,查看网页源码
直接在curl命令后加上网址,就可以看到网页源码。我们以网址www.sina.com为例(选择该网址,主要因为它的网页代码可以):
$ curl www.sina.com
<!DOCTYPE HTML PUBLIC“-// IETF // DTD HTML 2.0 // EN”>
<html> <head>
<title> 301永久移动</ title>
</ head> <body>
<h1>永久移动</ h1>
<p>文档已移到<a href="http://www.sina.com.cn/">此处</a>。</ p>
</ body> </ html>
如果要把这个网页保存下来,可以使用`-o`参数,则相当于使用wget命令了。
$ curl -o [文件名] www.sina.com
二,自动加速
使用`-L`参数,curl就会跳转到新的网址。
$ curl -L www.sina.com
键入上面的命令,结果就自动替换为www.sina.com.cn。
三,显示头信息
-i参数可以显示http response的头信息,结合网页代码一起。
$ curl -i www.sina.com
HTTP / 1.0 301永久移动
日期:2011年9月3日星期六23:44:10 GMT
服务器:Apache / 2.0.54(Unix)
位置:http://www.sina.com.cn/
缓存控制:max-age = 3600
过期:Sun,2011年9月4日00:44:10 GMT更改
:接受编码
内容长度:231
内容类型:text / html;charset = iso- 8859-1年龄
:3239
X缓存:sh201-9.sina.com.cn的HIT
连接:关闭<!DOCTYPE HTML PUBLIC“-// IETF // DTD HTML 2.0 // EN”>
<html> <head>
<title> 301永久移动</ title>
</ head> <body>
<h1>永久移动</ h1>
<p>文档已移到<a href="http://www.sina.com.cn/">此处</a>。</ p>
</ body> </ html>
`-I`参数则是只显示http response的头信息。
四,显示通信过程
-v参数可以显示一次HTTP通信的整个过程,包括端口连接和http request头信息。
$ curl -v www.sina.com
*关于connect()到www.sina.com端口80(#0)
*正在尝试61.172.201.195 ...已连接
*已连接到www.sina.com(61.172.201.195)端口80(#0)
> GET / HTTP /1.1
>用户代理:curl / 7.21.3(i686-pc-linux-gnu)libcurl / 7.21.3 OpenSSL / 0.9.8o zlib / 1.2.3.4 libidn / 1.18
>主机:www.sina.com
>接受: * / *
>
* HTTP 1.0,假定在正文之后关闭
<HTTP / 1.0 301永久移动
<日期:2011年9月4日,星期日00:42:39 GMT
<服务器:Apache / 2.0.54(Unix)
<位置:http:/ /www.sina.com.cn/
<缓存控制:max-age = 3600
<到期:Sun,2011年9月4日01:42:39 GMT
<变化:接受编码
<内容长度:231
<内容类型:text / html; 字符集= ISO-8859-1
<X-缓存:MISS从sh201-19.sina.com.cn
<连接:关闭
<
<!DOCTYPE HTML PUBLIC “ - // IETF // DTD HTML 2.0 // EN”>
<HTML > <head>
<title> 301永久移动</ title>
</ head> <body>
<h1>永久移动</ h1>
<p>文档已移动<a href =“ http://www.sina。 com.cn /“>此处</a>。</ p>
</ body> </ html>
*关闭连接#0
如果你觉得上面的信息还不够,那么下面的命令可以查看更详细的通信过程。
$ curl --trace output.txt www.sina.com
或者
$ curl --trace-ascii output.txt www.sina.com
运行后,请打开output.txt文件查看。
五,发送表单信息
发送表单信息有GET和POST两种方法。GET方法相对简单,只要把数据附在网址后面就行。
$ curl example.com/form.cgi?data=xxx
POST方法必须把数据和网址分开,curl就要用到--data参数。
$ curl -X POST --data“ data = xxx” example.com/form.cgi
如果你的数据没有经过表单编码,还可以让curl为你编码,参数是`--data-urlencode`。
$ curl -X POST--data-urlencode“ date = April 1” example.com/form.cgi
六,HTTP动词
curl默认的HTTP动词是GET,使用`-X`参数可以支持其他动词。
$ curl -X POST www.example.com
$ curl -X DELETE www.example.com
七,文件上传
预先文件上传的表单是下面这样:
<form method =“ POST” enctype ='multipart / form-data'action =“ upload.cgi”>
<input type =文件名= upload>
<input type =提交名= press value =“ OK”>
</ form >
你可以用curl这样上传文件:
$ curl --form upload = @ localfilename --form press = OK [URL]
八,参照栏
有时你需要在http request头信息中,提供一个referer细分,表示你是从哪里替换过来的。
$ curl --referer http://www.example.com http://www.example.com
九,用户代理范围
这个分区是用来表示客户端的设备信息。服务器有时会根据此分区,针对不同设备,返回不同格式的网页,某些手机版和桌面版。
iPhone4的用户代理是
Mozilla / 5.0(iPhone; U; CPU iPhone OS 4_0,例如Mac OS X; zh-cn)AppleWebKit / 532.9(KHTML,例如Gecko)版本/4.0.5移动版/ 8A293 Safari / 6531.22.7
curl可以这样模拟:
$ curl --user-agent“ [用户代理]” [URL]
十,cookie
使用`--cookie`参数,可以让curl发送cookie。
$ curl --cookie“ name = xxx” www.example.com
相对具体的Cookie的值,可以从http响应头信息的`Set-Cookie`细分中得到。
-c cookie文件可以保存服务器返回的cookie到文件,-b cookie文件可以使用该文件作为cookie信息,进行后续的请求。
$ curl -c cookie http://example.com
$ curl -b cookie http://example.com
十一,增加头信息
有时需要在http请求之中,自行增加一个头信息。`--header`参数就可以施加这个作用。
$ curl --header“ Content-Type:application / json” http://example.com
十二,HTTP认证
有些网域需要HTTP认证,这时curl需要用到`--user`参数。
$ curl-用户名:密码example.com