標籤:習慣 store order sci ssl cap oat manual 使用者名稱
curl 命令,是一個利用URL規則在命令列下工作的檔案傳輸工具。
curl 支援檔案的上傳和下載,所以是綜合傳輸工具,但按傳統,習慣稱curl為下載工具。
作為一款強力工具,curl支援包括HTTP、HTTPS、FTP等眾多協議,還支援 GET、POST、cookies、認證、從指定位移處下載部分檔案、使用者代理程式字串、限速、檔案大小、進度條等特徵,還可以做網頁處理流程和資料檢索自動化。
在進行web背景程式開發測試過程中,常常會需要發送url進行測試,使用curl可以方便地類比出符合需求的url命令
curl 文法:curl [options...] <url> # curl (選項) (參數)
樣本1:curl -m 30 --retry 3 https://proxy.mimvp.com/ip.php // curl 爬取網頁,擷取本機外網ip
樣本2:curl -m 30 --retry 3 -x https://120.77.176.179:8888 https://proxy.mimvp.com/ip.php // curl 通過代理IP爬取網頁,擷取本機外網ip
更多樣本:https://proxy.mimvp.com/demo2.php (Shell curl wget)
使用curl發送GET請求:curl protocol://ip:port/url?args
curl https://proxy.mimvp.com/login?user=admin&passwd=12345678
使用curl發送POST請求: (推薦)
curl -d "key1=value1&key2=value2&key3=value3" protocol://ip:port/path
樣本1:curl -d ‘post_data=i_love_mimvp.com‘ https://proxy.mimvp.com/ip.php // 測試 post ,發送什麼資料就返回什麼資料,如 ‘i_love_mimvp.com‘
樣本2:curl -d "user=admin&passwd=12345678" https://proxy.mimvp.com/login // 測試 post ,類比發送登入的使用者名稱和密碼
這種方法是參數直接在header裡面的,如需將輸出指定到檔案可以通過重新導向進行操作.
curl -H "Content-Type:application/json" -X POST -d ‘json data‘ URL
樣本1:curl -H "Content-Type:application/json" -X POST -d ‘{"post_data":"i_love_mimvp.com"}‘ ‘https://proxy.mimvp.com/ip.php‘
樣本2:curl -H "Content-Type:application/json" -X POST -d ‘{"user": "admin", "passwd":"12345678"}‘ https://proxy.mimvp.com/login
curl 應用執行個體
1. 檔案下載
curl命令可以用來執行下載、發送各種HTTP請求,指定HTTP頭部等操作。
如果系統沒有curl可以使用 yum install curl
安裝,也可以下載安裝。
curl是將下載檔案輸出到stdout,將進度資訊輸出到stderr,不顯示進度資訊使用 --silent
選項。
curl URL --silent
這條命令是將下載檔案輸出到終端,所有下載的資料都被寫入到stdout。
使用選項-O
將下載的資料寫入到檔案,必須使用檔案的絕對位址:
curl http://man.linuxde.net/text.iso --silent -O
選項-o
將下載資料寫入到指定名稱的檔案中,並使用--progress
顯示進度條:(常用)
curl http://man.linuxde.net/test.iso -o filename.iso --progress
######################################### 100.0%
2. 斷點續傳
curl能夠從特定的檔案位移處繼續下載,它可以通過指定一個便宜量來下載部分檔案:
curl URL/File -C 位移量#位移量是以位元組為單位的整數,如果讓curl自動推斷出正確的續傳位置使用-C -:curl -C -URL
3. curl設定引用來源頁(常用)
參照頁是位於HTTP頭部中的一個字串,用來表示使用者是從哪個頁面到達當前頁面的,
如果使用者點擊網頁A中的某個串連,那麼使用者就會跳轉到B網頁,網頁B頭部的參照頁字串就包含網頁A的URL。
使用--referer
選項指定參照頁字串:
curl --referer http://www.baidu.com https://proxy.mimvp.com
4. curl設定cookies(常用)
使用 --cookie "COKKIES"
選項來指定cookie,多個cookie使用分號分隔:
curl https://proxy.mimvp.com --cookie "user=root;pass=123456"
將cookie另存新檔一個檔案,使用 --cookie-jar
選項:
curl URL --cookie-jar cookie_file
5. curl 設定使用者代理程式字串(常用)
有些網站訪問會提示只能使用IE瀏覽器來訪問,這是因為這些網站設定了檢查使用者代理程式,
可以使用curl把使用者代理程式設定為IE,這樣就可以訪問了。
使用 --user-agent
或者-A
選項:
curl URL --user-agent "Mozilla/5.0"curl URL -A "Mozilla/5.0"
其他HTTP頭部資訊也可以使用curl來發送,使用-H
"頭部資訊" 傳遞多個頭部資訊,例如:
curl -H "Host:proxy.mimvp.com" -H "accept-language:zh-cn" URL
6. curl的頻寬控制和下載配額
使用--limit-rate
限制curl的下載速度:
curl URL --limit-rate 50k
命令中用k(KB)和m(MB)指定下載速度限制。
使用 --max-filesize
指定可下載的最大檔案大小:
curl URL --max-filesize bytes
如果檔案大小超出限制,命令則返回一個非0退出碼,如果命令正常則返回0。
7. curl 進行認證
使用curl選項 -u 可以完成HTTP或者FTP的認證,可以指定密碼,也可以不指定密碼在後續操作中輸入密碼:
curl -u user:pwd http://proxy.mimvp.comcurl -u user http://proxy.mimvp.com
8. curl 只列印回應標頭部資訊(常用)
通過 -I 或者 -head 可以只列印出HTTP頭部資訊:
yg-mac:~ homer$ curl -I https://proxy.mimvp.comHTTP/1.1 200 OKServer: nginxDate: Thu, 31 May 2018 03:51:08 GMTContent-Type: text/html; charset=UTF-8Connection: keep-aliveVary: Accept-EncodingSet-Cookie: PHPSESSID=d4kf789gvurb10p7g5pcqd80o6; path=/Expires: Thu, 19 Nov 1981 08:52:00 GMTCache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0Pragma: no-cacheVary: proxys-bj
curl 參數說明
-a/--append |
上傳檔案時,附加到目標檔案 |
-A/--user-agent <string> |
設定使用者代理程式發送給伺服器 |
-anyauth |
可以使用“任何”驗證方法 |
-b/--cookie <name=string/file> |
cookie字串或檔案讀取位置 |
--basic |
使用HTTP基本驗證 |
-B/--use-ascii |
使用ASCII /文本傳輸 |
-c/--cookie-jar <file> |
操作結束後把cookie寫入到這個檔案中 |
-C/--continue-at <offset> |
斷點續轉 |
-d/--data <data> |
HTTP POST方式傳送資料 |
--data-ascii <data> |
以ascii的方式post資料 |
--data-binary <data> |
以二進位的方式post資料 |
--negotiate |
使用HTTP身分識別驗證 |
--digest |
使用數字身分識別驗證 |
--disable-eprt |
禁止使用EPRT或LPRT |
--disable-epsv |
禁止使用EPSV |
-D/--dump-header <file> |
把header資訊寫入到該檔案中 |
--egd-file <file> |
為隨機資料(SSL)設定EGD socket路徑 |
--tcp-nodelay |
使用TCP_NODELAY選項 |
-e/--referer |
來源網址 |
-E/--cert <cert[:passwd]> |
用戶端認證檔案和密碼 (SSL) |
--cert-type <type> |
認證檔案類型 (DER/PEM/ENG) (SSL) |
--key <key> |
私密金鑰檔案名稱 (SSL) |
--key-type <type> |
私密金鑰檔案類型 (DER/PEM/ENG) (SSL) |
--pass <pass> |
私密金鑰密碼 (SSL) |
--engine <eng> |
加密引擎使用 (SSL). "--engine list" for list |
--cacert <file> |
CA認證 (SSL) |
--capath <directory> |
CA目錄 (made using c_rehash) to verify peer against (SSL) |
--ciphers <list> |
SSL密碼 |
--compressed |
要求返回是壓縮的形勢 (using deflate or gzip) |
--connect-timeout <seconds> |
設定最大請求時間 |
--create-dirs |
建立本地目錄的目錄階層 |
--crlf |
上傳是把LF轉變成CRLF |
-f/--fail |
串連失敗時不顯示http錯誤 |
--ftp-create-dirs |
如果遠程目錄不存在,建立遠程目錄 |
--ftp-method [multicwd/nocwd/singlecwd] |
控制CWD的使用 |
--ftp-pasv |
使用 PASV/EPSV 代替連接埠 |
--ftp-skip-pasv-ip |
使用PASV的時候,忽略該IP地址 |
--ftp-ssl |
嘗試用 SSL/TLS 來進行ftp資料轉送 |
--ftp-ssl-reqd |
要求用 SSL/TLS 來進行ftp資料轉送 |
-F/--form <name=content> |
類比http表單提交資料 |
--form-string <name=string> |
類比http表單提交資料 |
-g/--globoff |
禁用網址序列和範圍使用{}和[] |
-G/--get |
以get的方式來發送資料 |
-H/--header <line> |
自訂頭資訊傳遞給伺服器 |
--ignore-content-length |
忽略的HTTP頭資訊的長度 |
-i/--include |
輸出時包括protocol頭資訊 |
-I/--head |
只顯示要求標頭資訊 |
-j/--junk-session-cookies |
讀取檔案進忽略session cookie |
--interface <interface> |
使用指定網路介面/地址 |
--krb4 <level> |
使用指定安全層級的krb4 |
-k/--insecure |
允許不使用認證到SSL網站 |
-K/--config |
指定的設定檔讀取 |
-l/--list-only |
列出ftp目錄下的檔案名稱 |
--limit-rate <rate> |
設定傳輸速度 |
--local-port<NUM> |
強制使用本地連接埠號碼 |
-m/--max-time <seconds> |
設定最大傳輸時間 |
--max-redirs <num> |
設定最大讀取的目錄數 |
--max-filesize <bytes> |
設定最大下載的檔案總量 |
-M/--manual |
顯示全手動 |
-n/--netrc |
從netrc檔案中讀取使用者名稱和密碼 |
--netrc-optional |
使用 .netrc 或者 URL來覆蓋-n |
--ntlm |
使用 HTTP NTLM 身分識別驗證 |
-N/--no-buffer |
禁用緩衝輸出 |
-o/--output |
把輸出寫到該檔案中 |
-O/--remote-name |
把輸出寫到該檔案中,保留遠程檔案的檔案名稱 |
-p/--proxytunnel |
使用HTTP代理 |
--proxy-anyauth |
選擇任一Proxy 驗證方法 |
--proxy-basic |
在代理上使用基本驗證 |
--proxy-digest |
在代理上使用數字身分識別驗證 |
--proxy-ntlm |
在代理上使用ntlm身分識別驗證 |
-P/--ftp-port <address> |
使用連接埠地址,而不是使用PASV |
-q |
作為第一個參數,關閉 .curlrc |
-Q/--quote <cmd> |
檔案傳輸前,發送命令到伺服器 |
-r/--range <range> |
檢索來自HTTP/1.1或FTP伺服器位元組範圍 |
--range-file |
讀取(SSL)的隨機檔案 |
-R/--remote-time |
在本地組建檔案時,保留遠程檔案時間 |
--retry <num> |
傳輸出現問題時,重試的次數 |
--retry-delay <seconds> |
傳輸出現問題時,設定稍候再試時間 |
--retry-max-time <seconds> |
傳輸出現問題時,設定最大重試時間 |
-s/--silent |
靜默模式。不輸出任何東西 |
-S/--show-error |
顯示錯誤 |
--socks4 <host[:port]> |
用socks4代理給定主機和連接埠 |
--socks5 <host[:port]> |
用socks5代理給定主機和連接埠 |
--stderr <file> |
|
-t/--telnet-option <OPT=val> |
Telnet選項設定 |
--trace <file> |
對指定檔案進行debug |
--trace-ascii <file> |
Like --跟蹤但沒有hex輸出 |
--trace-time |
跟蹤/詳細輸出時,新增時間戳記 |
-T/--upload-file <file> |
上傳檔案 |
--url <URL> |
Spet URL to work with |
-u/--user <user[:password]> |
設定伺服器的使用者和密碼 |
-U/--proxy-user <user[:password]> |
設定代理使用者名稱和密碼 |
-w/--write-out [format] |
什麼輸出完成後 |
-x/--proxy <host[:port]> |
在給定的連接埠上使用HTTP代理 |
-X/--request <command> |
指定什麼命令 |
-y/--speed-time |
放棄限速所要的時間,預設為30 |
-Y/--speed-limit |
停止傳輸速度的限制,速度時間 |
Linux curl 命令類比 POST/GET 請求