【Linux】之 curl 命令
目录一、CRUL 简介二、CRUL 常见用法1、发送 HTTP 请求2、用户代理 User-Agent3、Cookie4、请求头 Header5、保存请求结果6、链接重定向一、CRUL 简介curl 是一款很强大的 http 命令行工具,用来请求 Web 服务器,支持文件的上传和下载,所以它的名字可以理解为:客户端的 URL 工具(Client for the URL);curl支持的通讯协议有:
目录
一、CRUL 简介
curl
是一款很强大的 http 命令行工具,用来请求 Web 服务器,支持文件的上传和下载,所以它的名字可以理解为:客户端的 URL 工具(Client for the URL);curl
支持的通讯协议有:DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET 和 TFTP;curl
提供了大量有用的功能,比如:代理支持、用户认证、FTP 传输,HTTP 数据请求、SSL 连接、cookie 等;curl
的所有传输相关功能都由 liburl 提供支持。
二、CURL 常见用法
使用语法:curl [option] [url]
、
1、发送 HTTP 请求
1)Get 请求
当我们不加任何选项使用 curl 时,默认会发送 GET 请求来获取链接内容到标准输出:
curl https://www.baidu.com
或者使用 -G, --get
选项来发送 get 请求:
curl -G https://www.baidu.com
或者使用 -X, --request
选项来指定请求类型:
curl -X GET https://www.baidu.com
2)Post 请求
Post 请求使用 -X, --request
选项指定请求类型,使用 -d, --data
选项指定发送的数据:
curl -X POST http://www.example.com/login -d "username=want&password=123456"
如果请求中使用了 -d, --data
选项的话,省略 -X, --request
选项,会默认为 POST 请求方式:
curl -d "username=want&password=123456" http://www.example.com/login
(输入如果是数组的话可以这么传:-d "list=1&list=2&list=3"
)
注意:
-
发送数据时,不仅可以使用 POST 方式,也可以使用 GET 方式:
curl -d "senddata" -X GET http://www.example.com/api
-
-d, --data
选项也可以指定从文件中读取数据(以@
开头):curl -d "@./data.txt" http://www.example.com/login
3)Put 请求
Put 请求和 Post 请求方式类似,只需变更 -X, --request
选项即可:
curl -d "username=want&password=123456" -X PUT http://www.example.com/login
4)Delete 请求
请求方式如下:
curl -X DELETE http://www.example.com/delete/api
2、用户代理 User-Agent
我们可以使用 -A, --user-agent
来自定义用户代理,例如下面的命令将伪装成安卓火狐浏览器对网页进行请求:
curl -A "Mozilla/5.0 (Android; Mobile; rv:35.0) Gecko/35.0 Firefox/35.0" http://www.baidu.com
3、Cookie
1)保存 cookie
当我们使用 curl
访问页面的时候,默认是不会保存 Cookie 的。有些情况下我们希望保存 Cookie 以便下次访问时使用。此时我们可以使用 -c, --cookie-jar
选项指定要保存的文件名:
curl -c "cookie-file" http://www.example.com
2)发送 cookie
发送 cookie 使用的选项是: -b, --cookie
,数据格式必须是:key1=value1; key2=value2
curl -b "JSESSIONID=D0112A5063D; uuid=eb028c50-f688" http://www.example.com
如果 cookie 内容中没有使用 =
划分 key
和 value
的话,默认该字符串内容为 cookie 文件,相当于读取解析文件中的内容作为 cookie :
curl -b "cookie-file" http://www.example.com
4、请求头 Header
1)发送请求头
当我们需要传递特定的 header 的时候,可以使用 -H, --header
选项来指定请求头内容:
curl -H "content-type: application/json; charset=UTF-8" -H "uuid: 123456" https://www.baidu.com
可以看到,一个 -H
选项只能填写一个 "key: value"
选项,多个 header 需要多个 -H
选项。同时我们也可以使用 -H
选项来传递 User-Agent 和 Cookie
:
-
传递 User-Agent 需要使用
"User-Agent: xxx"
的格式:-
curl -H "User-Agent: Custom-User-Agent" https://www.baidu.com
-
-
传递 Cookie 的格式为:
Cookie: key=value
-
curl -H "Cookie: JSESSIONID=D0112A5063D;uuid=eb028c50-f688" https://www.baidu.com
-
2)获取响应头
如果只想获取 HTTP 响应头信息,而不需要响应体内容时,可以使用 -I, --head
选项:
curl -I https://www.baidu.com
如果想要同时获取响应体内容和响应头信息,可以使用 -i, --include
选项:
curl -i https://www.baidu.com
5、保存请求结果
使用 -o
/-O
选项将请求结果保存到文件中:
-o, --output
(小写的 o):结果会被保存到命令行中提供的文件名;-O, --remote-name
(大写的 O):URL 中的文件名会被用作保存输出的文件名。
curl -o index.html http://www.codebelief.com
curl -O http://www.codebelief.com/page/2/
**注意:**使用 -O
选项时,必须确保链接末尾包含文件名,否则 curl 无法正确保存文件。如果遇到链接中无文件名的情况,应该使用 -o
选项手动指定文件名,或使用重定向符号:
curl http://www.codebelief.com > index.html
当然, -o
或 -O
选项可以同时指定多个链接:
curl -O http://www.codebelief.com/page/2/ -O http://www.codebelief.com/page/3/
curl -o page1.html http://www.codebelief.com/page/1/ -o page2.html http://www.codebelief.com/page/2/
6、链接重定向
如果直接使用 curl 打开某些被重定向后的链接,这种情况下就无法获取我们想要的网页内容。例如:
curl http://codebelief.com
会得到如下提示:
<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.10.3</center>
</body>
</html>
而当我们通过浏览器打开该链接时,会自动跳转到 http://www.codebelief.com。此时我们想要 curl 做的,就是像浏览器一样跟随链接的跳转,获取最终的网页内容。我们可以在命令中添加 -L, --location
选项来跟随链接重定向:
curl -L http://codebelief.com
这样我们就能获取到经过重定向后的网页内容了。
更多推荐
所有评论(0)