curl 命令详解

一:curl简介及语法

curl是一个命令行访问URL的工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。可以用它构造http request报文,且可以解析服务器返回的http response,额外还支持cookie特性,可以用curl完成web浏览器的基本功能,curl还支持HTTPS/FTP/FTPS/TELNET/LDAP等协议。如下图:

blob.png

[root@VM_110_98_centos ~]# curl --help

----------------------------------------------------------

省略输出内容


[root@VM_110_98_centos ~]#curl --manual 查看模板和详细用法

----------------------------------------------------------

省略输出内容



常用选项:

-v 详细输出,包含请求和响应的首部

-o test 将指定curl返回保存为test文件,内容从html/jpg到各种MIME类型文件

-O  把输出写到该文件中,保留远程文件的文件名

-C 在保存文件时进行续传

-x  ip:port 指定使用的http代理

-c 保存服务器的cookie文件

-H   为HTTP请求设置任意header及值

-L 跟随重定向

-S 显示错误信息

-s 静默模式,不输出任何信息

-G 以get的方式发送数据

-f  连接失败是不显示http错误

-d 以post方式传送数据

二:实例

1.只返回状态码

curl -I -m 15 -o /dev/null -s -w %{http_code} www.baidu.com

-I 仅测试HTTP头信息

-m 15 最多查询15s

-o /dev/null 屏蔽原有输出信息

-s  静默模式,不输出任何东西

-w %{http_code} 控制额外输出

2.自定义显示文字和返回状态码

curl -I -m 15 -o /dev/null -s -w "我爱你:%{http_code}" www.baidu.com

3.抓取页面内容到一个文件中(test文件不需要创建)

curl -o test.html www.baidu.com

blob.png

4. 后面的url要具体到某个文件,不然抓不下来,我们还可以用正则来抓取东西。

下图是在百度中搜索这几天比较热门的李小璐事件为例

curl 命令详解_第1张图片

复制黏贴这个网址红色箭头的网址http://www.lutouwang.net/detail/17/1231/8jbutue9c.html

curl -O http://www.lutouwang.net/detail/17/1231/8jbutue9c.html  

5. 通过--limit-rate选项对curl的最大网络使用进行限制

curl --limit-rate 1000B -O http://www.lutouwang.net/detail/17/1231/8jbutue9c.html

blob.png

6. 在访问需要授权的页面时,可通过-u选项提供用户名和密码进行授权

通常的做法是在命令行只输入用户名,之后会提示输入密码,这样可以保证在查看历史命令记录时不会将密码泄露,本例以访问svn服务器为例。

curl -u 用户名 svn服务器地址,之后输入密码即可看到目录curl 命令详解_第2张图片

7. 以CentOS 7.2版本使用curl一键安装Docker脚本为例

curl -sSL https://get.docker.com/ | sh (-s静默模式,-S显示错误,-L重定向,发送授权给其他主机)

-s和-S很好理解,怎么知道一个网址要用到这个-L参数呢,简单的截图来说明 

图片.png

上面有三个网址都是已经被重定向了,状态码显示301,所以我们要加上-L参数。

8. 不管是在家里还是在公司,很多时候都是在内网中,也就是说很多都是通过 NAT上网的,如果开发人员有需求,想知道他服务器的公网IP,可能有的朋友会说ip138.com,我们都知道现在服务器现在大多都是Linux系统,命令行下怎么办呢?下面是我们技术开发部的大神们分享的命令,我用我的内网虚拟机展示给大家。

1)web@rz13052:~$ curl ip.cn

当前 IP:36.110.230.14 来自:北京市 电信

2)web@rz13052:~$ curl ipinfo.io

{

  "ip": "36.110.230.14",

  "city": "Beijing",

  "region": "Beijing",

  "country": "CN",

  "loc": "39.9289,116.3883",

  "org": "AS23724 IDC, China Telecommunications Corporation"

}web@rz13052:~$

3)web@rz13052:~$ curl cip.cc  或者curl ip.cip.cc

IP      : 36.110.230.14

地址    : 中国  北京

 

数据二  : 北京市 | 电信

 

URL     : http://www.cip.cc/36.110.230.14

如果你在浏览器打开这个网址,可看到此命令的用法

curl 命令详解_第3张图片

4)web@rz13052:~$ curl myip.ipip.net

当前 IP:36.110.230.14  来自于:中国 北京 北京  电信

5)web@rz13052:~$ curl ifconfig.me 这个没下面第六条命令速度快

36.110.230.14

6)web@rz13052:~$ curl http://members.3322.org/dyndns/getip

36.110.230.14

总结下常用的我们就记住ip.cn和ifconfig.me就行,这个和Linux下的IP很相近。


附:官方文档 https://curl.haxx.se/docs/manpage.html