curl,你好强大。
curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。
查看源码
直接在curl命令后加上网址,就可以看到网页源码。这里就用我的博客首页来做示范,因为挺短的。
1 2 3 4 5 6 7 8 $ curl laplacence.github.io <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
加上 -o 保存则是进行保存,同等与wget。
1 2 3 4 $ curl -o <filename> laplacence.github.io % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 162 100 162 0 0 2700 0 --:--:-- --:--:-- --:--:-- 2700
自动跳转
有的网址是自动跳转的,比如我的首页。使用 -L 参数,curl就会跳转到新的网址。
1 2 3 4 5 6 7 8 $ curl -L laplacence.github.io <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Trash Can</title> MORE
-i 可以显示response header的信息,-I 则只显示header。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 $ curl -i laplacence.github.io HTTP/1.1 301 Moved Permanently Server: GitHub.com Content-Type: text/html Location: https://laplacence.github.io/ X-GitHub-Request-Id: 8096:4436:D7CE4:117F57:5F73E5A0 Content-Length: 162 Accept-Ranges: bytes Date: Wed, 30 Sep 2020 02:08:31 GMT Via: 1.1 varnish Age: 766 Connection: keep-alive X-Served-By: cache-hkg17933-HKG X-Cache: HIT X-Cache-Hits: 1 X-Timer: S1601431711.261853,VS0,VE1 Vary: Accept-Encoding X-Fastly-Request-ID: 61661b909bca09baaec268b4e7f0a60b317e424f <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html>
通信过程
-v 可以显示完整的http通信过程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 $ curl -v laplacence.github.io * Trying 185.199.109.153:80... * Connected to laplacence.github.io (185.199.109.153) port 80 (#0) > GET / HTTP/1.1 > Host: laplacence.github.io > User-Agent: curl/7.72.0 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 301 Moved Permanently < Server: GitHub.com < Content-Type: text/html < Location: https://laplacence.github.io/ < X-GitHub-Request-Id: 8096:4436:D7CE4:117F57:5F73E5A0 < Content-Length: 162 < Accept-Ranges: bytes < Date: Wed, 30 Sep 2020 02:28:30 GMT < Via: 1.1 varnish < Age: 1965 < Connection: keep-alive < X-Served-By: cache-hkg17926-HKG < X-Cache: HIT < X-Cache-Hits: 1 < X-Timer: S1601432910.418005,VS0,VE1 < Vary: Accept-Encoding < X-Fastly-Request-ID: 0dfc647792c349d178a666c0476557dbcee996d0 < <html> <head><title>301 Moved Permanently</title></head> <body> <center><h1>301 Moved Permanently</h1></center> <hr><center>nginx</center> </body> </html> * Connection #0 to host laplacence.github.io left intact
HTTP方法
curl默认使用GET,-X 后面可以指定其他方法。
1 2 3 4 5 6 7 $ curl -X POST laplacence.github.io <html> <head><title>405 Not Allowed</title></head> <body bgcolor="white"> <center><h1>405 Not Allowed</h1></center> </body> </html>
上传文件
假设网页的上传表单如下
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 2 $ curl --form upload=@<filename> --form press=OK [URL] ......
1 2 3 4 5 6 $ curl --user-agent "UA" [URL] ...... $ curl --cookie "cookie" [URL] ...... $ curl --header "header" [URL] ......