curl笔记

cURL 学习笔记

Command Line URL viewer == curl
curl不仅仅只是一个编程用的函数库,是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在”标准输出”(stdout)上面.它支持多种协议
正好和最近在学习的node.js 配合调试来使用

GET请求

1
2
3
4
5
6
7
8
9
10
# 直接访问
curl www.sina.com
# `-i`参数可以显示http response的头信息,连同网页代码一起。
curl -i www.sina.com
# `-v`参数可以显示一次http通信的整个过程,包括端口连接和http request头信息。
curl -v www.sina.com
# 查看更详细的通信过程
curl --trace output.txt www.sina.com
# 查看更详细的通信过程,保存到output.txt文件
curl --trace-ascii output.txt www.sina.com

POST请求

1
2
3
# 使用`-X`参数可以支持其他动词 ,尝试 --data可以简写 -d
curl -i -X POST --data "data=xxx" example.com/form.cgi
curl -X DELETE www.example.com

POST发送JSON

1
curl -i -H "Content-Type: application/json" -X POST -d '{"username":"xyz","password":"xyz"}' http://localhost:3000/api/login

文件上传

就是模拟表单上传,比如以下表单

1
2
3
4
<form method="POST" enctype='multipart/form-data' action="upload.cgi">
<input type=file name=upload>
<input type=submit name=press value="OK">
</form>

可以使用下面命令

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

下载文件

加上-o 或 -O ,小-o指定本地路径,大-O就是远程的文件名称
http协议和ftp协议用法基本是一样,只不过 ftp需要用户名和密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 下载在当前目录下,文件名称是: eclipse-inst-win64.exe  
$ curl -O http://ftp.jaist.ac.jp/pub/eclipse/oomph/epp/neon/R/eclipse-inst-win64.exe

# 指定本地路径
$ curl -o ~/download/ http://ftp.jaist.ac.jp/pub/eclipse/oomph/epp/neon/R/eclipse-inst-win64.exe

# ftp列出目录
$ curl ftp://ftp.sjtu.edu.cn -u name:passwd

# ftp下载
$ curl -o ~/download/xx.zip ftp://ftp.sjtu.edu.cn/xx -u name:passwd

# 另外curl不支持递归下载,不过可以用数组方式下载文件,比如我们要下载1-10.gif连续命名的文件
curl –u name:passwd ftp://www.xxx.com/img/[1-10].gif –O

# 要连续下载多个文件
curl –u name:passwd ftp://www.xxx.com/img/[one,two,three].jpg

其他参数

Referer字段

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

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

User Agent字段

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

1
2
# 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 --user-agent "[User Agent]" [URL]

1
2
3
4
5
curl --cookie "name=xxx" www.example.com
# -c cookie-file`可以保存服务器返回的cookie到文件
curl -c cookies http://example.com
# `-b cookie-file`可以使用这个文件作为cookie信息,进行后续的请求
curl -b cookies http://example.com

set header

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

HTTP认证

1
curl --user name:password example.com

参考

Using cURl to automate HTTP jobs
阮一峰老师curl