目录


一、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 内容中没有使用 = 划分 keyvalue 的话,默认该字符串内容为 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-AgentCookie

  • 传递 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

这样我们就能获取到经过重定向后的网页内容了。

Logo

更多推荐