Linux curl命令的使用

参考官方文档

https://curl.haxx.se/docs/manpage.html

一、什么是cURL

wikipedia中的解释如下:

cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
cURL支持的通信协议有FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP。

简单的说,cURL就是把发出请求然后得到响应并把响应数据显示到标准输出上的一个命令行工具
语法:
curl [option] [URL]

二、cURL的用法

1. 保存curl的结果到文件

curl -o [filename] [URL]

比如要保存 http://zeusjava.com 到blog.html中,可以使用

curl -o blog.html http://zeusjava.com

当然,也可以直接用

curl http://zeusjava.com >blog.html
1
$ curl -o blog.html http://zeusjava.com

使用 -o 也可以用于下载文件

curl -o android-studio-2.0.exe https://dl.google.com/dl/android/studio/install/2.0.0.20/android-studio-bundle-143.2739321-windows.exe

使用 -O可以将下载的文件名自动命名为服务器端文件的名字

curl -O https://dl.google.com/dl/android/studio/install/2.0.0.20/android-studio-bundle-143.2739321-windows.exe

2.显示http response的Header信息

curl -i [URL]

比如 curl -i http://zeusjava.com 服务器返回的Header信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HTTP/1.1 200 OK
Server: GitHub.com
Content-Type: text/html; charset=utf-8
Last-Modified: Thu, 14 Apr 2016 05:39:44 GMT
Access-Control-Allow-Origin: *
Expires: Mon, 02 May 2016 22:38:46 GMT
Cache-Control: max-age=600
X-GitHub-Request-Id: 17EB2B23:6096:A5D8C82:5727D49C
Content-Length: 16009
Accept-Ranges: bytes
Date: Sat, 07 May 2016 10:25:24 GMT
Via: 1.1 varnish
Age: 0
Connection: keep-alive
X-Served-By: cache-ams4129-AMS
X-Cache: HIT
X-Cache-Hits: 1
Vary: Accept-Encoding
X-Fastly-Request-ID: cd84d46856e9a80b4a283db2225e8caeb0d439b0

由于使用过的是Github Pages 所以Server是Github.com

3.显示Http request和 response的Header信息

curl -v [URL]

-v选项可以向标准输出中打印和Server的通信过程的信息,包括 http request和http response的信息
下面是和zeusjava.com的通信过程的头部信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
* Rebuilt URL to: http://www.zhihu.com/
* Trying 58.216.25.33...
* Connected to www.zhihu.com (58.216.25.33) port 80 (#0)
> GET / HTTP/1.1
> Host: www.zhihu.com
> User-Agent: curl/7.48.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: ZWS
< Connection: keep-alive
< Date: Mon, 13 Jun 2016 06:28:32 GMT
< Cache-Control: no-store
< Content-Type: text/html; charset=UTF-8
< Content-Length: 8440
< X-Za-Response-Id: 1be55a9577484a62ae8289e23216dfdb
< Content-Security-Policy: default-src *; img-src * data:; frame-src 'self' *.zhihu.com getpocket.com note.youdao.com; script-src 'self' *.zhihu.com *.google-analytics.com zhstatic.zhihu.com res.wx.qq.com 'unsafe-eval'; style-src 'self' *.zhihu.com 'unsafe-inline'
< Set-Cookie: q_c1=3af89a60e8454cad977358c33bff9823|1465799312000|1465799312000; Domain=zhihu.com; expires=Thu, 13 Jun 2019 06:28:32 GMT; Path=/
< Set-Cookie: _xsrf=ed72c7326f8de881578826312673cebe; Path=/
< Set-Cookie: l_cap_id="OTlmZjM4OGQ4YzEyNDkwNmJjMzQxM2NiZThlOGY3MDI=|1465799312|380fb662f09187c07ae84e38dc694197feae1f09"; Domain=zhihu.com; expires=Wed, 13 Jul 2016 06:28:32 GMT; Path=/
< Set-Cookie: cap_id="NDZhN2I5ZmM0ZjZlNGQxOWI4MDhkZTg0ZTZlMTU1ZDA=|1465799312|fc2935c8732a53b5216bbffebbceed1cf179f5ab"; Domain=zhihu.com; expires=Wed, 13 Jul 2016 06:28:32 GMT; Path=/
< Set-Cookie: n_c=1; Domain=zhihu.com; Path=/
< Pragma: no-cache
< X-Frame-Options: DENY
< X-Req-ID: 43CAD096575E5290
< Vary: Accept-Encoding
<

4. HTTP动词

Http的动词有,GET,POST,PUT,DELETE等
curl -X [动词] [URL]

curl默认的动作为 GET

3.1 FORM GET请求

curl [-X GET] zeusjava.com/articles?article_id=1

3.2 FORM POST请求

curl -X POST --data[-urlencode] "article_id=1" zeusjava.com

如果需要对表单参数进行编码的话,在–data后再加上-urlencode选项

5. 使用Cookies

curl --cookie "key=value" [URL]

cookie是客户端保存的服务端的一些信息,形式为key-value键值对,可以从Server的response的Set-Cookie中获得

使用 -c 选项,可以保存服务器的cookie到本地的文件中

curl -c [cookies file] [URL]

比如我保存 知乎的cookie到本地的cookies中

curl -c cookies.txt http://www.zhihu.com

得到的cookies.txt如下:

1
2
3
4
5
6
7
8
9
10
11
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.

.zhihu.com TRUE / FALSE 0 l_n_c 1
.zhihu.com TRUE / FALSE 1557273691 q_c1 5130907cc98041298bb4a42fafa2fe5d|1462665691000|1462665691000
www.zhihu.com FALSE / FALSE 0 _xsrf f3e5105c5196dffc93c5eefcbb1d2b55
.zhihu.com TRUE / FALSE 1465257691 cap_id "ZWQ2ZDIyNmQ2NjZjNDNjYzg1Y2QyZjE3ZjU5ZGM1YWY=|1462665691|258e372f45b5610e483a25bfa3dde1debd56ca08"
.zhihu.com TRUE / FALSE 1465257691 l_cap_id "NjMxYTliZGVkOWZlNDBmZDhjY2M2M2VjY2Y1MDQ0YTI=|1462665691|878a16bb3c5376f14a0d837c19db994c66b6b668"
.zhihu.com TRUE / FALSE 0 n_c 1

使用 -b选项,将本地的cookies文件发送至服务器端

curl -b cookies.txt http://www.zhihu.com

6.使用User-Agent

User Agent:字面意思就是用户代理,可以简单理解为访问设备的一种标识(这个标识指所代表的平台(黑莓、iPhone、Windows等)、浏览器(Chrome、IE、Safari等)、以及浏览器的版本等等),其实它包含的信息是比较多的。

下面是一个User-Agent的例子:

Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36

Mozilla声明了一个基于Mozilla的浏览器User-Agent,比如firefox,netscape等,Windows NT 10.0表示操作系统为 Windows 10

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

很多网站都会根据浏览器的User-Agent来响应不同的页面风格,叫做响应式设计,比如ipad请求 www.zhihu.com浏览器就会根据ipad的页面尺寸来适配ipad的屏幕大小。

7.文件上传

使用curl来模拟表单的文件上传

1
2
3
4
 <form method="POST" enctype='multipart/form-data' action="upload.do">
    <input type=file name="headimage">
    <input type=submit name ="click" value="点击上传">
  </form>

  $ curl –form headimage=@localfile –form click=点击上传 [URL]   

三、总结

当然curl的命令不止这么多,用到哪些在做补充 ==


本站由 Hank Zhao 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
本站总访问量