curl命令

来源:互联网 发布:json格式的数据 编辑:程序博客网 时间:2024/06/05 20:20

curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在”标准输出”(stdout)上面。
它支持多种协议,下面举例讲解如何将它用于网站开发。

查看网页源码

直接在curl命令后加上网址,就可以看到网页源码。我们以网址www.sina.com为例(选择该网址,主要因为它的网页代码较短):

  $ curl www.sina.com  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">  <html><head>  <title>301 Moved Permanently</title>  </head><body>  <h1>Moved Permanently</h1>  <p>The document has moved <a href="http://www.sina.com.cn/">here</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 Moved Permanently  Date: Sat, 03 Sep 2011 23:44:10 GMT  Server: Apache/2.0.54 (Unix)  Location: http://www.sina.com.cn/  Cache-Control: max-age=3600  Expires: Sun, 04 Sep 2011 00:44:10 GMT  Vary: Accept-Encoding  Content-Length: 231  Content-Type: text/html; charset=iso-8859-1  Age: 3239  X-Cache: HIT from sh201-9.sina.com.cn  Connection: close  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">  <html><head>  <title>301 Moved Permanently</title>  </head><body>  <h1>Moved Permanently</h1>  <p>The document has moved <a href="http://www.sina.com.cn/">here</a>.</p>  </body></html>

-I参数则是只显示http response的头信息。
四、显示通信过程
-v参数可以显示一次http通信的整个过程,包括端口连接和http request头信息。

  $ curl -v www.sina.com  * About to connect() to www.sina.com port 80 (#0)  * Trying 61.172.201.195... connected  * Connected to www.sina.com (61.172.201.195) port 80 (#0)  > GET / HTTP/1.1  > User-Agent: curl/7.21.3 (i686-pc-linux-gnu) libcurl/7.21.3 OpenSSL/0.9.8o zlib/1.2.3.4 libidn/1.18  > Host: www.sina.com  > Accept: */*  >   * HTTP 1.0, assume close after body  < HTTP/1.0 301 Moved Permanently  < Date: Sun, 04 Sep 2011 00:42:39 GMT  < Server: Apache/2.0.54 (Unix)  < Location: http://www.sina.com.cn/  < Cache-Control: max-age=3600  < Expires: Sun, 04 Sep 2011 01:42:39 GMT  < Vary: Accept-Encoding  < Content-Length: 231  < Content-Type: text/html; charset=iso-8859-1  < X-Cache: MISS from sh201-19.sina.com.cn  < Connection: close  <   <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">  <html><head>  <title>301 Moved Permanently</title>  </head><body>  <h1>Moved Permanently</h1>  <p>The document has moved <a href="http://www.sina.com.cn/">here</a>.</p>  </body></html>  * Closing connection #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=file name=upload>    <input type=submit name=press value="OK">  </form>

你可以用curl这样上传文件:

  $ curl --form upload=@localfilename --form press=OK [URL]

Referer字段

有时你需要在http request头信息中,提供一个referer字段,表示你是从哪里跳转过来的。

  $ curl --referer http://www.example.com http://www.example.com

User Agent字段

这个字段是用来表示客户端的设备信息。服务器有时会根据这个字段,针对不同设备,返回不同格式的网页,比如手机版和桌面版。
iPhone4的User Agent是

  Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7

curl可以这样模拟:

  $ curl --user-agent "[User Agent]" [URL]

使用--cookie参数,可以让curl发送cookie。

  $ curl --cookie "name=xxx" www.example.com

至于具体的cookie的值,可以从http response头信息的Set-Cookie字段中得到。
-c cookie-file可以保存服务器返回的cookie到文件,-b cookie-file可以使用这个文件作为cookie信息,进行后续的请求。

  $ curl -c cookies http://example.com  $ curl -b cookies http://example.com

增加头信息

有时需要在http request之中,自行增加一个头信息。--header参数就可以起到这个作用。

  $ curl --header "Content-Type:application/json" http://example.com

HTTP认证

有些网域需要HTTP认证,这时curl需要用到--user参数。

  $ curl --user name:password example.com

参考资料:
curl网站开发指南

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 夏天家里有蛆怎么办 屋里卧室生蛆怎么办 不盖被子睡不着怎么办 小孩高烧后腹泻怎么办 小宝宝发烧39度怎么办 儿童发烧说冷怎么办 房间里有飞虫怎么办 家里有烟灰虫怎么办 宝宝拉蛔虫成虫怎么办 尿里面有虫怎么办 家里厨房有蛆怎么办 镜子贴歪了怎么办 夏天房间有蛆虫怎么办 农村厕所有蛆虫怎么办 桌子里有像蛆的虫怎么办 家里有蛆虫卵怎么办 蜂桶里的棉虫怎么办 实木家具长虫了怎么办 家具里的虫子怎么办 狗身上有蛆虫怎么办 卫生间生蛆了怎么办 马桶里爬出蛆虫怎么办 发财树上的虫子怎么办 薄荷上的小白虫怎么办 薄荷上面有虫子怎么办 白水泥墙面脏了怎么办 墙壁小孩画脏怎么办 墙壁长了虫子怎么办 墙上好多小虫子怎么办 内墙受潮发黑脱皮怎么办 房间镜子对着床怎么办 墙面回潮起皮怎么办 室内墙皮发霉怎么办 卧室墙潮湿发霉怎么办 家里墙上有虫子怎么办 白漆家具脏了怎么办 白漆家具怎么办擦拭 墙被弄脏了怎么办 卧室颜色太粉怎么办 家里好多小爬虫怎么办 屋里经常有爬虫怎么办