1. 程式人生 > >curl命令基本使用小總結

curl命令基本使用小總結

建立連接 time_t 需要 功能 記錄 處理請求 AS 過去 下載文件

curl 下載文件

  • -o:將文件保存為命令行中指定的文件名的文件中
  • -O:使用URL中默認的文件名保存文件到本地
  • --limit-rate:限速
  • -C:對大文件使用斷點續傳功能
  • --silent:不顯示進度信息
# 當文件在下載完成之前結束該進程
[root@ ~]# curl -O http://www.gnu.org/software/gettext/manual/gettext.html
###### ########             20.1%

# 通過添加-C選項繼續對該文件進行下載,已經下載過的文件不會被重新下載
[root@ ~]# curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html
###### #########            21.1%

認證授權

在訪問需要授權的頁面時,可通過-u選項提供用戶名和密碼進行授權

[root@ ~]# curl -u username:password URL
通常的做法是在命令行只輸入用戶名,之後會提示輸入密碼,這樣可以保證在查看歷史記錄時不會將密碼泄露
[root@ ~]# curl -u username URL

傳遞請求數據

默認curl使用GET方式請求數據,可以通過 --data/-d 方式指定使用POST方式傳遞數據

# GET
[root@ ~]#curl -u username https://XXXXXXXXXX

# POST
[root@ ~]# curl -u username --data "param1=value1&param2=value" https://XXXXXXXXXX

# 也可以指定一個文件,將該文件中的內容當作數據傳遞給服務器端
[root@ ~]# curl --data @filename https://XXXXXXXXXX

註:默認情況下,通過POST方式傳遞過去的數據中若有特殊字符,首先需要將特殊字符轉義在傳遞給服務器端,如value值中包含有空格,則需要先將空格轉換成%20,如:
[root@ ~]# curl -d "value%201" http://hostname.com

在新版本的CURL中,提供了新的選項 --data-urlencode,通過該選項提供的參數會自動轉義特殊字符。
[root@ ~]# curl --data-urlencode "value 1" https://XXXXXXXXXX

除了使用GET和POST協議外,還可以通過 -X 選項指定其它協議,如:
[root@ ~]# curl -I -X DELETE https://XXXXXXXXXX

上傳文件
[root@ ~]#  curl --form "[email protected]" https://XXXXXXXXXX
 

curl 查看響應時間

[root@ ~]# curl -o /dev/null -s -w "time_namelookup: "%{time_namelookup}"\ntime_connect: "%{time_connect}"\ntime_appconnect: "%{time_appconnect}"\ntime_pretransfer: "%{time_pretransfer}"\ntime_starttransfer: "%{time_starttransfer}"\ntime_total: "%{time_total}"\n" "https://www.google.com"  

time_namelookup: 0.005
time_connect: 0.016
time_appconnect: 0.162
time_pretransfer: 0.162
time_starttransfer: 0.217
time_total: 0.261
其中幾個參數
  • -o:把curl 返回的html、js 寫到垃圾回收站[ /dev/null]
  • -s:掉所有狀態信息
  • -w, --write-out FORMAT What to output after completion
時間變量
  • time_total:總時間。
  • time_namelookup:DNS解析時間,從請求開始到DNS解析完畢所用時間。
  • time_connect:連接時間,從開始到建立TCP連接完成所用時間,包括前邊DNS解析時間,如果需要單純的得到連接時間,用這個time_connect時間減去前邊time_namelookup時間。
  • time_appconnect:連接建立完成時間,如SSL/SSH等建立連接或者完成三次握手時間。
  • time_pretransfer:從開始到準備傳輸的時間。
  • time_redirect:重定向時間,包括到最後一次傳輸前的幾次重定向的DNS解析,連接,預傳輸,傳輸時間。
  • time_starttransfer:開始傳輸時間。在client發出請求之後,Web 服務器返回數據的第一個字節所用的時間。

在客戶端發出請求之後,服務器處理請求並開始發回數據所用的時間是:time_starttransfer – time_connec = 0.201 秒

客戶端從服務器下載數據所用的時間是 time_total –time_starttransfer = 0.044 秒.

其他變量:
  • url_effective:The URL that was fetched last. This is most meaningful if you‘ve told curl to follow location: headers.
  • filename_effective: The ultimate filename that curl writes out to. This is only meaningful if curl is told to write to a file with the --remote-name or --output option. It‘s most useful in combination with the --remote-header-name option.
  • http_code: http狀態碼,如200成功,301轉向,404未找到,500服務器錯誤等。
  • http_connect :The numerical code that was found in the last response (from a proxy) to a curl CONNECT request. (Added in 7.12.4)
  • size_download :下載大小
  • size_upload :上傳大小
  • size_header:下載的header的大小
  • size_request:請求的大小
  • speed_download:下載速度,單位-byte/s
  • speed_upload:上傳速度,單位-byte/s
  • content_type:content-Type
  • num_connects:Number of new connects made in the recent transfer.
  • num_redirects:Number of redirects that were followed in the request.
  • redirect_url: When a HTTP request was made without -L to follow redirects, this variable will show the actual URL a redirect would take you to.
  • ftp_entry_path:The initial path libcurl ended up in when logging on to the remote FTP server.
  • ssl_verify_resul:ssl認證結果,返回0表示認證成功。

curl命令基本使用小總結