在linux中,curl是一個非常實用的、用來與伺服器之間傳輸資料的工具,是利用URL規則在命令列下工作的檔案傳輸工具;它支援檔案的上傳和下載,是綜合傳輸工具。 curl提供了一大堆非常有用的功能,包括代理存取、使用者認證、ftp上傳下載、HTTP POST、SSL連線、cookie支援、斷點續傳等等。
本教學操作環境:linux7.3系統、Dell G3電腦。
在Linux中curl是利用URL規則在命令列下工作的檔案傳輸工具,可以說是一款很強大的http命令列工具。它支援檔案的上傳和下載,是綜合傳輸工具,但按傳統,習慣稱url為下載工具。
curl是一個非常實用的、用來與伺服器之間傳輸資料的工具;支援的協定包括(DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS , POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),curl設計為無用戶交互下完成工作;curl提供了一大堆非常有用的功能,包括代理訪問、用戶認證、 ftp上傳下載、HTTP POST、SSL連線、cookie支援、斷點續傳...。
#1、發送GET請求
curl URL
curl URL?a=1&b=nihao
2、發送POST請求
curl -X POST -d 'a=1&b=nihao' URL
3、發送json格式請求:
curl -H "Content-Type: application/json" -X POST -d '{"abc":123,"bcd":"nihao"}' URL
curl -H "Content-Type: application/json" -X POST -d @test.json URL
其中,-H代表header頭,-X是指定什麼類型請求(POST/GET/HEAD/DELETE/PUT/PATCH),-d代表傳輸什麼資料。這幾個是最常用的。
查看所有curl指令: man curl或curl -h
請求頭:H,A,e
回應頭:I,i,D
cookie:b,c,j
傳輸:F(POST),G(GET),T(PUT),X
輸出:o,O,w
斷點續傳:r
偵錯:v,--trace,--trace- ascii,--trace-time
1、curl指令語法
curl [options] [URL...]
2、curl指令參數詳解
由於linux curl功能十分強大,所以指令參數十分多,下表只是愛E族(aiezu.com)帥選出來的部分參數,更多參數請執行「man curl」指令查看。
參數組 | 參數 | 描述 | |
---|---|---|---|
#url | url | 需要抓取的一到多個URLs; 多個下面通配符的方式: 1、http://{www,ftp,mail}.aiezu.com; 2、 http://aiezu.com/images/[001-999].jpg; 3、http://aiezu.com/images/[1-999].html; 4、ftp:// aiezu.com/file[a-z].txt |
|
請 求 頭 |
-H "name:value" --header "name: value" |
(HTTP)新增一個http header(http請求頭); | |
-H "name:" --header "name :" |
(HTTP)移除一個http header(http請求頭); | ||
-A "string" --user-agent "string" |
(HTTP)設定Http請求頭“User-Agent”,伺服器透過“User-Agent”可以判斷客戶端使用的瀏覽器名稱和作業系統類型,偽造此參數能導致伺服器做出錯誤判斷。 也可以使用「-H」, “--header option」設定此選項; |
||
#-e 258c40d94d8689854ad79c4076dd5f96 --referer 258c40d94d8689854ad79c4076dd5f96 |
(HTTP)設定造訪時的來源頁面,告訴http服務從哪個頁面進入此頁面; -e "aiezu.com"相當於「-H "Referer: www.qq .com"」; |
||
響 應 頭 |
-I --head |
(HTTP)只輸出HTTP-header,不取得內容(HTTP/FTP/FILE)。 用於HTTP服務時,取得頁面的http頭; (如:curl -I http://aiezu.com) 當用於FTP/FILE時,將會取得檔案大小、最後修改時間; (如:curl -I file://test.txt) |
|
#-i --include |
(HTTP)輸出HTTP頭與回傳內容; | ||
-D 28897b20adb25fbae118a3f80f538dec #dump-header 28897b20adb25fbae118a3f80f538dec |
(HTTP)轉儲http回應頭到指定檔案; | ||
cookie | -b name=data --cookie name=data |
(HTTP)傳送cookie資料到HTTP伺服器,資料格式為:"NAME1=VALUE1; NAME2=VALUE2"; 如果行中沒有“=”,將參數值當作cookie檔名; # 這個Cookie資料可以是由伺服器的http回應頭「Set-Cookie:」行傳送過來的; |
|
#-c filename --cookie-jar file name |
(HTTP)完成操作後將伺服器傳回的cookies儲存到指定的檔案; 指定參數值為「-」將定向到標準輸出「如控制台」; |
||
-j --junk-session-cookies |
(HTTP)告訴curl放棄所有的"session cookies"; 相當於重啟瀏覽器; |
||
|
|
||
#代理程式 -x host:port -x [protocol://[user:pwd@]host[:port] | --proxy [protocol:// [user:pwd@]host[:port]
使用HTTP代理存取;如果未指定端口,預設使用8080端口; protocol預設為http_proxy,其他可能的值包括: | http_proxy、HTTPS_PROXY、socks4、socks4a、socks5;||
-x "http_proxy://aiezu:123@aiezu.com:80" -p | --proxytunnel
將「-x」參數的代理,作為通道的方式去代理非HTTP協議,如ftp; --socks4 aa3755fb6675d042aec4e88952ca7a83 | --socks4a aa3755fb6675d042aec4e88952ca7a83(HTTP)使用HTTP POST方式傳送「key/ value對」數據,相當於瀏覽器表單屬性(method="POST",enctype="application/x-www-form-urlencoded") -d,--data:HTTP方式POST資料; --data-ascii:HTTP方式POST ascii資料; --data-binary:HTTP方式POST二進位資料; --data-urlencode:HTTP方式POST資料(進行urlencode); 如果資料以「@」開頭,後面接著一個文件,將post文件內的內容; |
|
#-F name=@file -F name=302d0f58015a56c08a55351b0404de7b |
(HTTP )類似“--form”,但“@”、“e3107fa9003d838b84c91472995d7720 --continue-at ab76cfca1a1dc7ff1291dcdf873f72ec |
斷點續轉,從檔案頭的指定位置開始繼續下載/上傳; offset續傳開始的位置,如果offset值為“-”,curl會自動從檔案中識別起始位置開始傳輸; |
|
-r 01fbef2219010f55027ff7800552222a --range 01fbef2219010f55027ff7800552222a |
(HTTP/FTP/SFTP/FILE) 只傳送內容的指定部分: 0 -499:最前面500位元組; -500:最後面500位元組; 9500-:最前面9500位元組; 0-0,-1:最前面和最後面的1位元組; 100-199,500-599:兩個100位元組; |
||
## 認證 | #--basic(HTTP)告訴curl使用HTTP Basic authentication(HTTP協定時),這是預設認證方式; | ||
(HTTP)使用NTLM驗證方式,用於HTTP協定; | 一般用於IIS使用NTLM的網站; |
||
(HTTP)使用HTTP Digest authentication加密,用於HTTP協定; | 配合「-u/--user」選項,防止密碼使用明文方式傳送; |
||
(HTTP)使用GSS-Negotiate authentication方式,用於HTTP協定; | 它主要目的是為它的主要目的是為kerberos5認證提供支援支援; |
||
(HTTP)告訴curl自動選擇適當的身份認證方法,並選用最安全的方式; | |||
--user user :password | 使用使用者名稱、密碼認證,此參數會覆寫「-n」、「--netrc」和「--netrc-optional」選項;
如果你只提供用戶名,curl會要求你輸入密碼; 如果你使用「SSPI」開啟的curl函式庫做「NTLM」認證,可以使用不含用戶名密碼的「-u:」選項,強制curl使用目前登入的使用者名稱密碼進行認證; 此參數相當於設定http 頭「Authorization:」; |
||
-E 74063d4b2b6fa6af4120fe1244df1f3f | --cert 772feebd10c0542a689ff13e4c6aef60 | #(SSL)指定「PEM」格式的憑證檔案與憑證密碼;||
(SSL)告訴curl所提供憑證的類型:PEM、DER、ENG等; | 預設為“PEM”; | ||
--cacert 1ab445ebdefb81aa995cfcdde0d68dca | (SSL)告訴curl所以指定的CA憑證文件,必須是“PEM”格式; | ||
--capath 37267f4f933c2cdc2d7d8bd8ea4aa03c | (SSL)告訴curl所以指定目錄下的CA證書用來驗證; 這些憑證必須是「PEM」格式; |
||
--crlfile 28897b20adb25fbae118a3f80f538dec | (HTTPS/FTPS)提供一個PEM格式的文件,用來指定被撤銷的憑證清單; | ||
-k --insecure |
#(SSL)設定此選項將允許使用無憑證的不安全SSL進行連線和傳輸。 | ||
SSL 其他 |
--ciphers e8f064f971a27002865e16550000e50d | (SSL)指定SSL要使用的加密方式;如:「aes_256_sha_256」; | |
--engine 8a11bc632ea32a57b3e3693c7987c420 | 設定一個OpenSSL加密引擎用於加密操作; 使用「curl --engine list 「查看支援的加密引擎清單; |
||
--random-file | #(SSL)指定包含隨機資料的檔案路徑名稱;資料是用來為SSL連接產生隨機種子為; | ||
--egd-file 28897b20adb25fbae118a3f80f538dec | (SSL)為隨機種子產生器EGD(Entropy Gathering Daemon socket)指定的路徑名; | ||
-1/--tlsv1 --tlsv1.0 --tlsv1.1 --tlsv1.2 -2/ --sslv2 -3/--sslv3 |
(SSL)使用TLS版本2與遠端伺服器通訊; (SSL)使用TLS 1.0版本與遠端伺服器通訊; (SSL )使用TLS 1.1版本與遠端伺服器通訊; (SSL)使用TLS 1.2版本與遠端伺服器通訊; (SSL)使用SSL版本2與遠端伺服器通訊; (SSL)使用SSL版本3與遠端伺服器通訊; |
||
私鑰 公鑰 |
--key 42538adbdb6240b2b083a000a615d5bd | (SSL/SSH)指定一個私鑰檔案名稱;為指定時自動嘗試使用下列檔案:「~/.ssh/id_rsa」、「~/.ssh/id_dsa」、「./id_rsa'」、 「./id_dsa」; | |
--key-type 7674b22ef33c73b930516fd6bc30b7a3 | (SSL)指定私鑰檔案類型,支援:DER、PEM、ENG,預設是PEM; | ||
--pass b6cb73fae0efbdb0e9a26fd2eaddb3bb | (SSL/SSH)指定私鑰檔案的密碼; | ||
--pubkey 42538adbdb6240b2b083a000a615d5bd | (SSH)使用指定檔案提供的您公鑰; | ||
FTP | -P --ftp-port 76e1e1789a9b27cfc8f98fc2e9f4b6ed |
限制curl使用的最大頻寬;如果未指定單位,預設單位為“bytes/秒”,你也可以指定單位為“K”、“M”、“G”等單位,如:“--limit-rate 1m”為限制最大使用頻寬為“1m位元組/秒”; | ##-y |
If a download is slower than speed-limit bytes per second during a speed-time period, the download gets aborted. If speed-time is used, the default speed-limit will will 1 unless set with -Y. This option controls transfers and thus will not affect slow connects etc. If this is a concern for you, try the --connect-timeout option. |
If a download is slower than this given speed (in bytes per second) for speed-time seconds it gets aborted. speed-time is set with -y and is 30 if not set. | ||
其他 選項 |
-0/--http1.0 | (HTTP) 強制curl使用HTTP 1.0而不是使用預設的HTTP 1.1; | |
--interface 8a11bc632ea32a57b3e3693c7987c420 | 使用指定的網路卡介面存取; curl --interface eth0 http:/ /aiezu.com curl --interface 10.0.0.101 http://aiezu.com |
||
-X e2b9f03cad787b9644e1f51fd23b7dac --request e2b9f03cad787b9644e1f51fd23b7dac |
(HTTP)指定與伺服器通訊使用的請求方法,如:GET、PUT、POST、DELETE等,預設GET; | ||
--keepalive-time 66b556e3499ad9a34108fe8c8cfb952b | 設定keepalive時間 | ||
#--no-keepalive | 關閉keepalive功能; | ||
# --no-buffer |
|||
--buffer | |||
| ##-L--location | ||
--location-trusted | |||
(HTTP)請求對返回內容使用壓縮演算法進行壓縮;curl支援對gzip壓縮進行解壓縮; | |||
--connect-timeout 0e72eeb93e8222d25f37582edca0e1bc |
指定最大連線逾時,單位「秒」; |
#-m seconds | |
限制整個curl操作的最長時間,單位為秒; |
-s --silent | 安靜模式。不要顯示進度表或錯誤訊息;||
- | # --progress-bar顯示進度列; | ||
錯誤 | 選項 | ||
(HTTP)連線失敗時(400以上錯誤)不回傳預設錯誤頁面,而是回傳一個curl錯誤碼「22」; | --retry d2c1e15f2758ae4ead444247148d09ea --retry-delay 0e72eeb93e8222d25f37582edca0e1bc --retry-max-time 0e72eeb93e8222d25f37582edca0e1bc 失敗重試次數; 重試間隔時間; 最大重試時間; -S | --show-error||
--stderr 28897b20adb25fbae118a3f80f538dec | |||
##輸出 | -o file | ||
將回傳內容輸出到檔案。 如果是用過通配符獲取多個url,可以使用“#”後面跟著“數字序號”,curl會自動將它替換對應的關鍵字,如: | curl "http://aiezu.com/ {a,b}.txt" -o "#1.txt"; 將儲存為:「a.txt」,「b.txt」; curl "http://aiezu. com/{a,b}_[1-3].txt" -o "#1#2.txt"; 將儲存為:a1.txt、a2.txt、a3.txt、b1.txt、 b2.txt、b3.txt | 如果要根據規則建立保存目錄,參考:“--create-dirs”||
-O | --remote-name | #將傳回內容輸出到目前目錄下,且在url中檔案名稱相同的檔案中(不含目錄);||
--create-dirs |
與「-o」參數配合使用,建立必要的本機目錄層次結構 ##### ####-w### --write-out format######操作完成後在傳回訊息尾部追加指定的內容;要追加的內容可以是一個字串「string」、從檔案中取得「@filename」、從標準輸入取得「@-」###### 格式參數中可以用%{variable_name} 方式使用回應資訊的相關變量,如:%{content_type}、%{http_code}、% {local_ip}...,更多變數參考「man curl」取得;###### 格式參數可以使用「\n」、「\r」、「\t」等轉義字元;#### ########調試######--trace 28897b20adb25fbae118a3f80f538dec######轉儲所有傳入和傳出的資料到文件,包括描述資訊;### 使用“ -”作為檔案名稱將輸出發送到標準輸出。 ############--trace-ascii file######轉儲所有傳入和傳出的資料到文件,包括描述訊息,只轉儲ASCII部分,更容易閱讀;### 使用“-”作為檔案名稱將輸出傳送到標準輸出。 ###這個選項會覆寫先前使用的-v、 --verbose、 --trace-ascii選項; |
||
#--trace-time | ##轉儲檔案中新增時間資訊;|||
--config f6e9e3a277d0a30df37c6f516833faa0 | 從設定檔讀取參數,參考:http://curl.haxx .se/docs/|||
--verbose | 顯示更詳細的信息,調試時使用;|||
-M | --manual | 顯示完整的幫助手冊;||
linux curl用法幫助; |
-a/--append # | |
--basic /--use-ascii | |
HTTP POST方式傳送資料 | |
ascii的方式使用post資料##1--data##-#--data | ascii的方式12##1-- ;data> |
## | 使用HTTP驗證 |
#--digest | 使用EPRT或LPRT |
##1# | 為隨機資料( SSL)設定EGD socket路徑 |
--tcp-nodelay ab8deabf4cd45eca11aef014c6d6b8a0 | 「客戶端憑證檔案與密碼(SSL) |
# #憑證檔案類型(DER/PEM/ENG) (SSL) | |
##--key-type 7674b22ef33c73b930516fd6bc30b7a3 | ##-. -pass 49975435ade3d9601b2c4bf28a4fad80 的 |
--cacert 28897b20adb25fbae118a3f80f538dec --capath 6f655ecf17a4459bb2d05758ed836e3d | |
--ciphers 4309a73696dbaeac0ddd115cebb6f9b7 | # |
建立本地目錄的目錄層級結構##11 | #上傳是將LF轉換成CRLF |
--ftp-create-dirs | #若遠端目錄不存在,並建立遠端目錄 |
控制CWD的使用 | |
使用PASV的時候,忽略此IP位址 | #嘗試用SSL/TLS 來進行ftp資料傳輸 |
--ftp-ssl-reqd c | -F/--form 6ba18088e2b918c3ef0f6dd868ccb2bf |
#-form-string <name=string> ; | |
-g/--globoff 使用{}而[] | |
-G/--get ”#1 -help 1 | #1 |
#--ignore-content-length | |
#輸出時包含protocol頭資訊 | |
讀取檔案時忽略「session cookie | |
--krb4 d01d6777fee22c1abcc265b0d6170d56 # | |
-K/--config # | |
#1p目錄 | |
--local-port7a16b29f015c60d23685bc81cbbd96c2 | |
- m/--max-time 0e72eeb93e8222d25f37582edca0e1bc | |
o | 設定最大讀取的目錄數 |
--max-filesize 4d5e782727adce28d9e975bcb1fbc12c | 設置最大下載的文件總量 |
-M/--manual | o | c
--netrc-optional | |
#使用HTTP NTLM 驗證 | |
-p/--proxytunnel | #使用HT1 |
--proxy-basic # | |
--proxy-ntlm | -P/--ftp-port 208700f394e4cf40a7aa505373e0130b|
-Q/--##使用連接埠位址,而不是使用PASV | |
-Q/--##使用連接埠位址,而不是使用PASV | |
-Q/--##使用連接埠地址; | |
# | 讀取(SSL)的隨機檔案 |
-R/--remote-time | #「在本機產生檔案」時,保留遠端檔案時間 |
#1S? ; | ##使用問題時,請重試的次數 |
傳輸出現問題時,設定重試間隔時間 | |
傳輸出現問題時,設置最大重試時間 | |
# | 用socks4代理程式給定主機和連接埠 |
--socks5 aa3755fb6675d042aec4e88952ca7a83 # | socks5代理程式給定主機和連接埠給定主機和連接埠為 |
##-t/--telnet-option 67aea6ab925e1fd5e2ee4553bfe0973c | Telnet選項設定 |
--trace <file> | 對指定文件進行debug |
--trace-ascii 28897b20adb25fbae118a3f80f538dec | Like --跟踪但沒有hex輸出 |
--trace-time ;212111111000時間/條件#> | |
-U/--proxy-user 251924df0d6d19e84c42ee228692f6a3 | |
-V/--version | |
指定什麼指令 | |
-y/--speed-time | 放棄限速所需的時間。默認為30 |
-Y/--speed-limit | 停止傳輸速度的限制,速度時間'秒 |
-z/--time-cond | 傳送時間設定 |
-0/--http1.0 | |
-0/--http1.0 | |
#使用TLSv1(SSL | |
使用SSLv2的(SSL) | |
SSLv3(S | 」v3(S|
Sv3(S | |
Sv3(S |
下面是linux curl命令的錯誤代碼和她們的相應的錯誤訊息,可能會出現在惡劣的環境中。
退出碼 | 錯誤描述 |
---|---|
#1 | 不支援的協定。此版本的curl 不支援此協定。 |
2 | 初始化失敗。 |
# URL 格式錯誤。語法不正確。 | |
#無法解析代理程式。無法解析給定的代理主機。 | |
無法解析主機。給定的遠端主機未解析。 | |
無法連線到主機。 | |
#FTP 奇怪的伺服器回覆。伺服器發送的資料curl無法解析。 | |
FTP存取被拒絕。伺服器拒絕登入或拒絕存取您想要存取的特定資源或目錄。大多數情況下,您嘗試更改到伺服器上不存在的目錄。 | |
FTP 奇怪的 PASS 回應。 Curl 無法解析發送到 PASS 請求的回复。 | |
FTP 奇怪的 PASV 回复,Curl 無法解析發送到 PASV 請求的回复。 | |
FTP奇怪的227格式。 Curl 無法解析伺服器傳送的 227 行。 | |
FTP 無法取得主機。無法解析我們在 227 行中獲得的主機 IP。 | |
FTP 無法設定二進位檔案。無法將傳輸方法變更為二進位。 | |
#部分檔案。僅傳輸了文件的一部分。 | |
FTP 無法下載/存取給定文件,RETR(或類似)命令失敗。 | |
FTP 引用錯誤。 quote 指令從伺服器傳回錯誤。 | |
未檢索到 HTTP 頁面。未找到請求的 url 或傳回另一個錯誤,HTTP 錯誤代碼為 400 或以上。僅當使用 -f/--fail 時才會出現此回傳代碼。 | |
寫入錯誤。 Curl 無法將資料寫入本機檔案系統或類似檔案系統。 | |
FTP 無法儲存檔案。伺服器拒絕用於 FTP 上傳的 STOR 操作。 | |
讀取錯誤。各種讀取問題。 | |
記憶體不足。記憶體分配請求失敗。 | |
操作逾時。根據條件已達到指定的逾時期限。 | |
FTP 連接埠失敗。 PORT 命令失敗。並非所有 FTP 伺服器都支援 PORT 指令,請嘗試使用 PASV 進行傳輸! | |
FTP 無法使用 REST。 REST 命令失敗。此指令用於恢復 FTP 傳輸。 | |
HTTP 範圍錯誤。範圍「命令」不起作用。 | |
HTTP post 錯誤。內部請求後產生錯誤。 | |
SSL 連線錯誤。 SSL 握手失敗。 | |
FTP 下載復原錯誤。無法繼續先前中止的下載。 | |
FILE 無法讀取檔案。無法開啟文件。權限? | |
LDAP 無法綁定。 LDAP 綁定操作失敗。 | |
LDAP 搜尋失敗。 | |
找不到函數。未找到所需的 LDAP 函數。 | |
已被回調中止。應用程式告訴curl 中止操作。 | |
內部錯誤。使用錯誤參數呼叫函數。 | |
介面錯誤。無法使用指定的傳出介面。 | |
重定向過多。當遵循重定向時,curl 達到最大數量。 | |
#指定了未知的TELNET 選項。 | |
telnet 選項格式錯誤。 | |
對等方的SSL 憑證或SSH MD5 指紋不正確。 | |
伺服器沒有回覆任何內容,這裡被視為錯誤。 | |
SSL 加密引擎找不到。 | ##54 |
55 | |
56 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
##64 | ##請求的FTP SSL 等級失敗。 |
發送資料需要倒帶失敗。 | |
初始化SSL 失敗Engine. | |
使用者名稱、密碼或類似內容未被接受,curl 無法登入。 | |
68 | TFTP 伺服器上找不到檔案。 |
#69 | TFTP 伺服器上的權限問題。 |
TFTP 伺服器磁碟空間不足。 | |
非法 TFTP 操作。 | |
未知TFTP 傳輸ID。 | |
檔案已存在(TFTP)。 | |
沒有這樣的使用者(TFTP)。 | |
字元轉換失敗。 | |
需要字元轉換函數。 | |
讀取SSL CA 憑證時出現問題(路徑?存取權限? ). | |
URL中引用的資源不存在。 | ##79 |
80 | |
82 | |
83 | |
XX | |
以上是linux curl是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!