神器之CURL

什么是CURL

curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix\多种Linux发行版中,并且有DOS和Win32\Win64下的移植版本.

常见用法

1.获取页面内容

root@amu:/Data/apps# curl 127.0.0.1/login.php



    login
    


    欢迎注册,请输入用户名和密码  
    

姓名:

密码:

微信连Wi-Fi

当我们不加任何选修使用curl时,默认会发送GET请求来获取链接内容到标准输出

2.显示HTTP头

root@amu:/Data/apps# curl -I 127.0.0.1
HTTP/1.1 302 Found
Server: nginx/1.13.8
Date: Thu, 10 May 2018 03:47:56 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/7.1.13
Location: http://127.0.0.1/login.php

也可以同时显示HTTP头和文件内容,使用-i选项
curl -i 127.0.0.1

3.将内容保存到文件

root@amu:/Data/apps# curl -o index.html 127.0.0.1
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   969    0   969    0     0   429k      0 --:--:-- --:--:-- --:--:--  473k
root@amu:/Data/apps# ls
index.html  nginx1.13.8  openresty  php7.1.13
root@amu:/Data/apps# curl -O 127.0.0.1/index.php
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   969    0   969    0     0   441k      0 --:--:-- --:--:-- --:--:--  473k
root@amu:/Data/apps# ls
index.html  index.php  nginx1.13.8  openresty  php7.1.13

两种用法:-o 和 -O
-o:结果会被保存到命令行中提供的文件名
-O:URL中的文件名会被用作保存输出的文件名

4.同时下载多个文件

curl -O 127.0.0.1/index.php -O 127.0.0.1/login.php
当然用-o也可以

5.使用 -L 跟踪重定向

从第二个例子中我们可以看到网站给我们返回的状态码是302,说明网站跳转了,在这种情况下就无法获取我们想要的网页内容,这是我们就可以用-L选项了.

root@amu:/Data/apps# curl -L 127.0.0.1



    login
    


    欢迎注册,请输入用户名和密码  
    

姓名:

密码:

微信连Wi-Fi

6.使用 -A 自定义 USER-Agent

curl --user-agent "[User Agent]" [URL]
curl --user-agent "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7" www.baidu.com

7.使用 -H 自定义 header

curl -H 'Host: 192.168.199.4' -H 'Accept-Language:es' http://127.0.0.1

8.使用 Cookie

#保存http的responses里面的Cookie信息
curl -c cookiec.txt http://www.baidu.com
#保存http的response里面的header信息
curl -D cookied.txt http://www.baidu.com
#使用cookie
curl -b cookiec.txt http://www.baidu.com

9.传递数据

http协议有各种请求的方法,如:GET\POST\HEADD\PUT等.这些方法curl都支持.使用-X指定请求方法,没有指定的情况下,默认使用GET请求方法.POSTPUT方法提交的数据用-d参数指定

//GET方法
curl http://127.0.0.1?age=2
//HEAD方法,获取响应的头部信息
curl -I http://127.0.0.1
// POST 方法
curl -X POST http://127.0.0.1 -d "name=admin&pwd=123"
// PUT 方法
curl -X PUT http://127.0.0.1 -d '{"name":"admin"}'

10.查看详细请求和响应过程

root@amu:/Data/apps# curl -v 127.0.0.1
* Rebuilt URL to: 127.0.0.1/
*   Trying 127.0.0.1...
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)
> GET / HTTP/1.1
> Host: 127.0.0.1
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 302 Found
< Server: nginx/1.13.8
< Date: Thu, 10 May 2018 04:41:13 GMT
< Content-Type: text/html; charset=UTF-8
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Powered-By: PHP/7.1.13
< Location: http://127.0.0.1/login.php
< 

( ! ) Notice: Undefined index: HTTP_REFERER in /Data/apps/nginx1.13.8/html/index.php on line 66
Call Stack
#TimeMemoryFunctionLocation
10.0002373888{main}( ).../index.php:0
* Connection #0 to host 127.0.0.1 left intact

11.查看请求或响应的具体某一指标

root@amu:/Data/apps# curl -s -w "%{time_total}\n%{size_download}\n" https://github.com -o /dev/null
7.514
54697
root@amu:/Data/apps# curl -w %{http_code} https://github.com -o /dev/null
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 54697    0 54697    0     0  11389      0 --:--:--  0:00:04 --:--:-- 13515

12.完成认证

curl --basic --user 'admin:123' http://example.com/

13文件上传

curl --form upload=@localfilename --form press=OK [URL]
curl http://api.example.com/profile -F "[email protected]"
curl http://api.example.com/profile -F "[email protected]" -F "phone=123456789"

其他一些用法

curl --trace output.txt www.sina.com
curl --referer http://www.example.com http://www.example.com

欢迎关注个人微信公众号:

你可能感兴趣的:(神器之CURL)