curl curl是一個非常實用的、用來與伺服器之間傳輸數據的工具;支持的協議包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, S ...
curl
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支持、斷點續傳...。
curl,全稱CommandLine URL 或 CommandLine Uniform Resource Locator,顧名思義,curl命令是在命令行方式下工作,利用URL的語法進行數據的傳輸或者文件的傳輸。
這個命令行工具現在多用於Unix和Linux操作系統,是一個開源的工具,功能十分強大。
下麵是crul的官方網站,我們可以該網站獲取該工具的最新版本,還有最全面的使用方法。
https://curl.haxx.se/
從官網我們可以知道,該工具支持以下30多種類型的傳輸方式,這當中包含多種協議。
命令語法
> 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 |
(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 |
(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; 如: --proxy 8.8.8.8:8080; -x "http_proxy://aiezu:[email protected]:80" |
-p --proxytunnel | 將“-x”參數的代理,作為通道的方式去代理非HTTP協議,如ftp; | |
--socks4 <host[:port]> --socks4a <host[:port]> --socks5 <host[:port]> 【參考】 | 使用SOCKS4代理; 使用SOCKS4A代理; 使用SOCKS5代理; 此參數會覆蓋“-x”參數; | |
--proxy-anyauth --proxy-basic --proxy-diges --proxy-negotiate --proxy-ntlm | http代理認證方式,參考: --anyauth --basic --diges --negotiate --ntlm | |
-U user:password --proxy-user user:password | 設置代理的用戶名和密碼; | |
數據 傳輸 | -G --get 【參考】 | 如果使用了此參數,“-d/”、“--data”、“--data-binary”參數設置的數據,講附加在url上,以GET的方式請求; |
-d @file -d "string" --data "string" --data-ascii "string" --data-binary "string" --data-urlencode "string" 【參考】 | (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=<file -F name=content --form name=content 【參考】 | (HTTP)使用HTTP POST方式發送類似“表單欄位”的多類型數據,相當於同時設置瀏覽器表單屬性(method="POST",enctype="multipart/form-data"),可以使用此參數上傳二進位文件。 如果欄位內容以“@”開頭,剩下的部分應該是文件名,curl將會上傳此文件,如: curl -F "[email protected]" http://aiezu.com; curl -F "[email protected];type=text/html" http://aiezu.com curl -F "page=@/tmp/a;filename=a.txt" http://aiezu.com 如果欄位內容以“<”開頭,剩下的部分應該是文件名,curl將從文件中獲取作為此欄位的值,如:curl -F "text=<text.txt" http://aiezu.com; | |
--form-string <key=value> | (HTTP)類似於“--form”,但是“@”、“<”無特殊含義; | |
-T file --upload-file file | 通過“put”的方式將文件傳輸到遠程網址; 選項參數只使用字元"-",將通過stdin讀入文件內容; 如: cat test.txt|curl "http://aiezu.com/a.php" -T - curl "http://aiezu.com/a.php" -T - <test.txt 此參數也可以使用通配符: curl -T "{file1,file2}" http://aiezu.com curl -T "img[1-1000].png" http://aiezu.com | |
斷點 續傳 | -C |
斷點續轉,從文件頭的指定位置開始繼續下載/上傳; offset續傳開始的位置,如果offset值為“-”,curl會自動從文件中識別起始位置開始傳輸; |
-r |
(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協議時),這是預設認證方式; |
--ntlm | (HTTP)使用NTLM身份驗證方式,用於HTTP協議; 一般用於IIS使用NTLM的網站; | |
--digest | (HTTP)使用HTTP Digest authentication加密,用於HTTP協議; 配合“-u/--user”選項,防止密碼使用明文方式發送; | |
--negotiate | (HTTP)使用GSS-Negotiate authentication方式,用於HTTP協議; 它主要目的是為它的主要目的是為kerberos5認證提供支持支持; | |
--anyauth | (HTTP)告訴curl自動選擇合適的身份認證方法,並選用最安全的方式; | |
-u user:password --user user:password | 使用用戶名、密碼認證,此參數會覆蓋“-n”、“--netrc”和“--netrc-optional”選項; 如果你只提供用戶名,curl將要求你輸入密碼; 如果你使用“SSPI”開啟的curl庫做“NTLM”認證,可以使用不含用戶名密碼的“-u:”選項,強制curl使用當前登錄的用戶名密碼進行認證; 此參數相當於設置http頭“Authorization:”; | |
證書 | -E <證書[:密碼]> --cert <證書[:密碼]> | (SSL)指定“PEM”格式的證書文件和證書密碼; |
--cert-type |
(SSL)告訴curl所提供證書的類型:PEM、DER、ENG等; 預設為“PEM”; | |
--cacert <CA證書> | (SSL)告訴curl所以指定的CA證書文件,必須是“PEM”格式; | |
--capath <CA證書路徑> | (SSL)告訴curl所以指定目錄下的CA證書用來驗證; 這些證書必須是“PEM”格式; | |
--crlfile |
(HTTPS/FTPS)提供一個PEM格式的文件,用於指定被吊銷的證書列表; | |
-k --insecure | (SSL)設置此選項將允許使用無證書的不安全SSL進行連接和傳輸。 | |
SSL 其他 | --ciphers |
(SSL)指定SSL要使用的加密方式;如:“aes_256_sha_256”; |
--engine |
設置一個OpenSSL加密引擎用於加密操作; 使用“curl --engine list”查看支持的加密引擎列表; | |
--random-file | (SSL)指定包含隨機數據的文件路徑名;數據是用來為SSL連接產生隨機種子為; | |
--egd-file |
(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 |
(SSL/SSH)指定一個私鑰文件名;為指定時自動嘗試使用下麵文件:“/.ssh/id_rsa”、“/.ssh/id_dsa”、“./id_rsa'”、 “./id_dsa”; |
--key-type |
(SSL)指定私鑰文件類型,支持:DER、PEM、ENG,預設是PEM; | |
--pass |
(SSL/SSH)指定私鑰文件的密碼; | |
--pubkey |
(SSH)使用指定文件提供的您公鑰; | |
FTP | -P --ftp-port <介面> | (FTP)FTP主動模式時,設置一個地址等待伺服器的連接,如: 網卡:eth1 IP:8.8.8.8 主機名:aiezu.com 可以加埠號:eth1:20000-21000; |
--crlf | (FTP)上傳時將換行符(LF)轉換為回車換行(CRLF); | |
--ftp-account [data] | (FTP)ftp帳號信息; | |
--ftp-method [method] | (FTP)可選值:multicwd/nocwd/singlecwd; | |
--ftp-pasv | (FTP)使用使用PASV(被動)/EPSV模式; | |
--ftp-skip-pasv-ip | (FTP)使用PASV的時,跳過指定IP; | |
--ftp-create-dirs | (FTP)上傳時自動創建遠程目錄; | |
-l --list-only | (FTP)列出ftp文件列表; | |
-B --use-ascii | (FTP/LDAP)使用Ascii傳輸模式,用於FTP、LDAP;在ftp中相當與使用了“type=A;”模式。 | |
--disable-epsv | (FTP)告訴curl在PASV(被動模式)時不要使用EPSV; | |
--disable-eprt | (FTP)告訴curl在主動模式時禁用EPRT和LPRT; | |
限速 | --limit-rate |
限制curl使用的最大帶寬;如果未指定單位,預設單位為“bytes/秒”,你也可以指定單位為“K”、“M”、“G”等單位,如:“--limit-rate 1m”為限制最大使用帶寬為“1m位元組/秒”; |
-y --speed-time | 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 be 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. | |
-Y --speed-limit |
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 |
使用指定的網卡介面訪問; curl --interface eth0 http://aiezu.com curl --interface 10.0.0.101 http://aiezu.com | |
-X |
(HTTP)指定與伺服器通信使用的請求方法,如:GET、PUT、POST、DELETE等,預設GET; | |
--keepalive-time |
設置keepalive時間 | |
--no-keepalive | 關閉keepalive功能; | |
--no-buffer | 禁用對輸出流緩衝; | |
--buffer | 啟用輸出流緩衝; | |
-L --location | (HTTP/HTTPS)追隨http響應頭“Location:”定向到跳轉後的頁面; (在http響應碼為3XX時使用,如301跳轉、302跳轉) | |
--location-trusted | (HTTP/HTTPS)同“--location”,但跳轉後會發送跳轉前的用戶名和密碼; | |
--compressed | (HTTP)請求對返回內容使用壓縮演算法進行壓縮;curl支持對gzip壓縮進行解壓; | |
--connect-timeout |
指定最大連接超時,單位“秒”; | |
-m seconds --max-time seconds | 限制整個curl操作的最長時間,單位為秒; | |
-s --silent | 安靜模式。不要顯示進度表或錯誤消息; | |
-# --progress-bar | 顯示進度條; | |
錯誤 選項 | -f --fail | (HTTP)連接失敗時(400以上錯誤)不返回預設錯誤頁面,而是返回一個curl錯誤碼“22”; |
--retry |
失敗重試次數; 重試間隔時間; 最大重試時間; | |
-S --show-error | 安靜模式下顯示錯誤信息; | |
--stderr |
錯誤信息保存文件; | |
輸出 | -o file --output 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 |
轉儲所有傳入和傳出的數據到文件,包括描述信息; 使用“-”作為文件名將輸出發送到標準輸出。 |
--trace-ascii file | 轉儲所有傳入和傳出的數據到文件,包括描述信息,只轉儲ASCII部分,更容易閱讀; 使用“-”作為文件名將輸出發送到標準輸出。 這個選項會覆蓋之前使用的-v、 --verbose、 --trace-ascii選項; | |
--trace-time | 轉儲文件中添加時間信息; | |
-K --config |
從配置文件中讀取參數,參考:http://curl.haxx.se/docs/ | |
-v --verbose | 顯示更詳細的信息,調試時使用; | |
幫助 | -M --manual | 顯示完整的幫助手冊; |
-h --help | linux curl用法幫助; |
-h 解釋
-a/--append | 上傳文件時,附加到目標文件 |
---|---|
--anyauth | 可以使用“任何”身份驗證方法 |
--basic | 使用HTTP基本驗證 |
-B/--use-ascii | 使用ASCII文本傳輸 |
-d/--data | HTTP POST方式傳送數據 |
--data-ascii | 以ascii的方式post數據 |
--data-binary | 以二進位的方式post數據 |
--negotiate | 使用HTTP身份驗證 |
--digest | 使用數字身份驗證 |
--disable-eprt | 禁止使用EPRT或LPRT |
--disable-epsv | 禁止使用EPSV |
--egd-file |
為隨機數據(SSL)設置EGD socket路徑 |
--tcp-nodelay | 使用TCP_NODELAY選項 |
-E/--cert <cert[:passwd]> | 客戶端證書文件和密碼 (SSL) |
--cert-type |
證書文件類型 (DER/PEM/ENG) (SSL) |
--key |
私鑰文件名 (SSL) |
--key-type |
私鑰文件類型 (DER/PEM/ENG) (SSL) |
--pass |
私鑰密碼 (SSL) |
--engine |
加密引擎使用 (SSL). "--engine list" for list |
--cacert |
CA證書 (SSL) |
--capath |
CA目 (made using c_rehash) to verify peer against (SSL) |
--ciphers |
SSL密碼 |
--compressed | 要求返回是壓縮的形勢 (using deflate or gzip) |
--connect-timeout |
設置最大請求時間 |
--create-dirs | 建立本地目錄的目錄層次結構 |
--crlf | 上傳是把LF轉變成CRLF |
--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/--help | 幫助 |
-H/--header |
自定義頭信息傳遞給伺服器 |
--ignore-content-length | 忽略的HTTP頭信息的長度 |
-i/--include | 輸出時包括protocol頭信息 |
-I/--head | 只顯示文檔信息 |
-j/--junk-session-cookies | 讀取文件時忽略session cookie |
--interface |
使用指定網路介面/地址 |
--krb4 |
使用指定安全級別的krb4 |
-k/--insecure | 允許不使用證書到SSL站點 |
-K/--config | 指定的配置文件讀取 |
-l/--list-only | 列出ftp目錄下的文件名稱 |
--limit-rate |
設置傳輸速度 |
--local-port |
強制使用本地埠號 |
-m/--max-time |
設置最大傳輸時間 |
--max-redirs |
設置最大讀取的目錄數 |
--max-filesize |
設置最大下載的文件總量 |
-M/--manual | 顯示全手動 |
-n/--netrc | 從netrc文件中讀取用戶名和密碼 |
--netrc-optional | 使用 .netrc 或者 URL來覆蓋-n |
--ntlm | 使用 HTTP NTLM 身份驗證 |
-N/--no-buffer | 禁用緩衝輸出 |
-p/--proxytunnel | 使用HTTP代理 |
--proxy-anyauth | 選擇任一代理身份驗證方法 |
--proxy-basic | 在代理上使用基本身份驗證 |
--proxy-digest | 在代理上使用數字身份驗證 |
--proxy-ntlm | 在代理上使用ntlm身份驗證 |
-P/--ftp-port | 使用埠地址,而不是使用PASV |
-Q/--quote |
文件傳輸前,發送命令到伺服器 |
--range-file | 讀取(SSL)的隨機文件 |
-R/--remote-time | 在本地生成文件時,保留遠程文件時間 |
--retry |
傳輸出現問題時,重試的次數 |
--retry-delay |
傳輸出現問題時,設置重試間隔時間 |
--retry-max-time |
傳輸出現問題時,設置最大重試時間 |
-S/--show-error | 顯示錯誤 |
--socks4 <host[:port]> | 用socks4代理給定主機和埠 |
--socks5 <host[:port]> | 用socks5代理給定主機和埠 |
-t/--telnet-option <OPT=val> | Telnet選項設置 |
--trace |
對指定文件進行debug |
--trace-ascii |
Like --跟蹤但沒有hex輸出 |
--trace-time | 跟蹤/詳細輸出時,添加時間戳 |
--url |
Spet URL to work with |
-U/--proxy-user <user[:password]> | 設置代理用戶名和密碼 |
-V/--version | 顯示版本信息 |
-X/--request |
指定什麼命令 |
-y/--speed-time | 放棄限速所要的時間。預設為30 |
-Y/--speed-limit | 停止傳輸速度的限制,速度時間'秒 |
-z/--time-cond | 傳送時間設置 |
-0/--http1.0 | 使用HTTP 1.0 |
-1/--tlsv1 | 使用TLSv1(SSL) |
-2/--sslv2 | 使用SSLv2的(SSL) |
-3/--sslv3 | 使用的SSLv3(SSL) |
--3p-quote | like -Q for the source URL for 3rd party transfer |
--3p-url | 使用url,進行第三方傳送 |
--3p-user | 使用用戶名和密碼,進行第三方傳送 |
-4/--ipv4 | 使用IP4 |
-6/--ipv6 | 使用IP6 |
linux錯誤代碼
退出碼 | 錯誤描述 |
---|---|
1 | Unsupported protocol. This build of curl has no support for this protocol. |
2 | Failed to initialize. |
3 | URL malformed. The syntax was not correct. |
5 | Couldn't resolve proxy. The given proxy host could not be resolved. |
6 | Couldn't resolve host. The given remote host was not resolved. |
7 | Failed to connect to host. |
8 | FTP weird server reply. The server sent data curl couldn't parse. |
9 | FTP access denied. The server denied login or denied access to the particular resource or directory you wanted to reach. Most often you tried to change to a directory that doesn't exist on the server. |
11 | FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request. |
13 | FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request. |
14 | FTP weird 227 format. Curl couldn't parse the 227-line the server sent. |
15 | FTP can't get host. Couldn't resolve the host IP we got in the 227-line. |
17 | FTP couldn't set binary. Couldn't change transfer method to binary. |
18 | Partial file. Only a part of the file was transferred. |
19 | FTP couldn't download/access the given file, the RETR (or similar) command failed. |
21 | FTP quote error. A quote command returned error from the server. |
22 | HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if -f/--fail is used. |
23 | Write error. Curl couldn't write data to a local filesystem or similar. |
25 | FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading. |
26 | Read error. Various reading problems. |
27 | Out of memory. A memory allocation request failed. |
28 | Operation timeout. The specified time-out period was reached according to the conditions. |
30 | FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT command, try doing a transfer using PASV instead! |
31 | FTP couldn't use REST. The REST command failed. This command is used for resumed FTP transfers. |
33 | HTTP range error. The range "command" didn't work. |
34 | HTTP post error. Internal post-request generation error. |
35 | SSL connect error. The SSL handshaking failed. |
36 | FTP bad download resume. Couldn't continue an earlier aborted download. |
37 | FILE couldn't read file. Failed to open the file. Permissions? |
38 | LDAP cannot bind. LDAP bind operation failed. |
39 | LDAP search failed. |
41 | Function not found. A required LDAP function was not found. |
42 | Aborted by callback. An application told curl to abort the operation. |
43 | Internal error. A function was called with a bad parameter. |
45 | Interface error. A specified outgoing interface could not be used. |
47 | Too many redirects. When following redirects, curl hit the maximum amount. |
48 | Unknown TELNET option specified. |
49 | Malformed telnet option. |
51 | The peer's SSL certificate or SSH MD5 fingerprint was not ok. |
52 | The server didn't reply anything, which here is considered an error. |
53 | SSL crypto engine not found. |
54 | Cannot set SSL crypto engine as default. |
55 | Failed sending network data. |
56 | Failure in receiving network data. |
58 | Problem with the local certificate. |
59 | Couldn't use specified SSL cipher. |
60 | Peer certificate cannot be authenticated with known CA certificates. |
61 | Unrecognized transfer encoding. |
62 | Invalid LDAP URL. |
63 | Maximum file size exceeded. |
64 | Requested FTP SSL level failed. |
65 | Sending the data requires a rewind that failed. |
66 | Failed to initialize SSL Engine. |
67 | The user name, password, or similar was not accepted and curl failed to log in. |
68 | File not found on TFTP server. |
69 | Permission problem on TFTP server. |
70 | Out of disk space on TFTP server. |
71 | Illegal TFTP operation. |
72 | Unknown TFTP transfer ID. |
73 | File already exists (TFTP). |
74 | No such user (TFTP). |
75 | Character conversion failed. |
76 | Character conversion functions required. |
77 | Problem with reading the SSL CA cert (path? access rights?). |
78 | The resource referenced in the URL does not exist. |
79 | An unspecified error occurred during the SSH session. |
80 | Failed to shut down the SSL connection. |
82 | Could not load CRL file, missing or wrong format (added in 7.19.0). |
83 | Issuer check failed (added in 7.19.0). |
XX | More error codes will appear here in future releases. The existing ones are meant to never change. |
示例
下載文件
curl命令可以用來執行下載、發送各種HTTP請求,指定HTTP頭部等操作。如果系統沒有curl可以使用yum install curl
安裝,也可以下載安裝。curl是將下載文件輸出到stdout,將進度信息輸出到stderr,不顯示進度信息使用--silent
選項。
curl URL --silent
這條命令是將下載文件輸出到終端,所有下載的數據都被寫入到stdout。
使用選項-O
將下載的數據寫入到文件,必須使用文件的絕對地址:
選項-o
將下載數據寫入到指定名稱的文件中,並使用--progress
顯示進度條:
斷點續傳
curl能夠從特定的文件偏移處繼續下載,它可以通過指定一個便移量來下載部分文件:
curl URL/File -C 偏移量
偏移量是以位元組為單位的整數,如果讓curl自動推斷出正確的續傳位置使用-C -:
curl -C -URL
使用curl設置參照頁字元串
參照頁是位於HTTP頭部中的一個字元串,用來表示用戶是從哪個頁面到達當前頁面的,如果用戶點擊網頁A中的某個連接,那麼用戶就會跳轉到B網頁,網頁B頭部的參照頁字元串就包含網頁A的URL。
使用--referer
選項指定參照頁字元串:
curl --referer https://www.baidu.com https://www.coonote.com
用curl設置cookies
使用--cookie "COKKIES"
選項來指定cookie,多個cookie使用分號分隔:
curl http://www.baidu.com --cookie "user=ivanlee;pass=123456"
將cookie另存為一個文件,使用--cookie-jar
選項:
curl URL --cookie-jar cookie_file
用curl設置用戶代理字元串
有些網站訪問會提示只能使用IE瀏覽器來訪問,這是因為這些網站設置了檢查用戶代理,可以使用curl把用戶代理設置為IE,這樣就可以訪問了。使用--user-agen
t或者-A
選項:
curl URL --user-agent "Mozilla/5.0"
curl URL -A "Mozilla/5.0"
其他HTTP頭部信息也可以使用curl來發送,使用-H"頭部信息" 傳遞多個頭部信息,例如:
curl -H "Host:www.baidu.com" -H "accept-language:zh-cn" URL
curl的帶寬控制和下載配額
使用--limit-rate
限制curl的下載速度:
curl URL --limit-rate 50k
命令中用k(千位元組)和m(兆位元組)指定下載速度限制。
使用--max-filesize
指定可下載的最大文件大小:
curl URL --max-filesize bytes
如果文件大小超出限制,命令則返回一個非0退出碼,如果命令正常則返回0。
只列印響應頭部信息
通過-I或者-head可以只列印出HTTP頭部信息:
增加頭部信息
有時需要在 http request 之中,自行增加一個頭信息。--header
參數就可以起到這個作用。
$ curl --header "Content-Type:application/json" http://example.com
顯示通信過程
-v
參數可以顯示一次 http 通信的整個過程,包括埠連接和 http request 頭信息。
ivanlee@ivanleedeMacBook-Pro ~ % curl -v http://www.jd.com
* Trying 116.207.187.3:80...
* Connected to www.jd.com (116.207.187.3) port 80 (#0)
> GET / HTTP/1.1
> Host: www.jd.com
> User-Agent: curl/7.79.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 302 Moved Temporarily
< Server: nginx
< Date: Fri, 27 May 2022 06:13:44 GMT
< Content-Type: text/html
< Content-Length: 138
< Connection: keep-alive
< Location: https://www.jd.com/
< Timing-Allow-Origin: *
< X-Trace: 302-1653632024641-0-0-0-0-0
< Strict-Transport-Security: max-age=3600
<
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host www.jd.com left intact
http動詞
curl 預設的 HTTP 動詞是 GET,使用 -X
參數可以支持其他動詞。
$ curl -X POST www.example.com
$ curl -X DELETE www.example.com
下載資源
-O 大寫字母O參數, 直接八寸資源到本地,有原文件名
ivanlee@ivanleedeMacBook-Pro ~ % curl -O http://hcdn1.luffycity.com/static/frontend/public_class/PY1@2x_1566529821.1110113.png
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 253 100 253 0 0 42 0 0:00:06 0:00:05 0:00:01 61
ivanlee@ivanleedeMacBook-Pro ~ % ls
Applications (Parallels) GolandProjects PY1@2x_1566529821.1110113.png PycharmProjects configfile java_error_in_pycharm_13464.log
使用curl模擬post請求
> curl -d "param1=value1¶m2=value2" https://json.im/login
> curl -d'login=rumenz&password=123' -X POST https://json.im/login
> curl -d 'login=rumenz' -d 'password=123' -X POST https://json.im/login
--data-urlencode
參數等同於-d
,發送POST
請求的數據體,區別在於會自動將發送的數據進行 URL 編碼.
> curl --data-urlencode 'comment=hello world' https://json.im/login
上傳文本文件
> curl -d '@data.txt' https://json.im/upload
post json格式的數據
> curl -l -H 'Content-type: application/json' -X POST -d '{"rumenz":"123"}' https://json.im/123.json
向伺服器發送 Cookie
> curl https://json.im --cookie "user=rumenz&pass=123456"
Cookie寫入到一個文件
> curl -c cookies.txt https://json.im
上傳二進位文件
-F
參數用來向伺服器上傳二進位文件。
> curl -F "[email protected]" https://json.im/uploadfile
上面命令會給 HTTP 請求加上標頭 Content-Type: multipart/form-data ,然後將文件123..png作為file欄位上傳。
-F
參數可以指定MIME
類型。
> curl -F '[email protected];type=image/png' https://json.im/uploadfile
上面命令指定 MIME 類型為image/png,否則 curl 會把 MIME 類型設為 application/octet-stream。
-F
參數也可以指定文件名。
> curl -F '[email protected];filename=rumenz.png' https://json.im/uploadfile
上面命令中,原始文件名為
123.png
,但是伺服器接收到的文件名為rumenz.png
。
請求跟隨伺服器的重定向
-L
參數會讓 HTTP 請求跟隨伺服器的重定向。curl 預設不跟隨重定向。
> curl -L -d 'rumenz=123' https://json.im/
curl介面測試
curl 可以很方便地完成對 REST API 的調用場景,比如:設置 Header,指定 HTTP 請求方法,指定 HTTP 消息體,指定許可權認證信息等。通過 -v 選項也能輸出 REST 請求的所有返回信息。curl 功能很強大,有很多參數,這裡列出 REST 測試常用的參數:
-X/--request [GET|POST|PUT|DELETE|…] 指定請求的 HTTP 方法
-H/--header 指定請求的 HTTP Header
-d/--data 指定請求的 HTTP 消息體(Body)
-v/--verbose 輸出詳細的返回信息
-u/--user 指定賬號、密碼
-b/--cookie 讀取 cookie
# 典型的測試命令為:
curl -v -X POST -H "Content-Type: application/json" http://127.0.0.1:8080/user -d'{"username":"admin","password":"admin1234"}'...
# 測試get請求
curl http://www.linuxidc.com/login.cgi?user=test001&password=123456
# 測試post請求
curl -d "user=nickwolfe&password=12345" http://www.linuxidc.com/login.cgi
# 請求主體用json格式
curl -X POST -H 'content-type: application/json' -d @json文件絕對路徑 URL
curl -X POST -H 'content-type: application/json' -d 'json內容' URL
# 請求主體用xml格式
curl -X POST -H 'content-type: application/xml' -d @xml文件絕對路徑 URL
curl -X POST -H 'content-type: application/xml' -d 'xml內容' URL
# 發送post請求時需要使用-X選項,除了使用POST外,還可以使用http規範定義的其它請求謂詞,如PUT,DELETE等
curl -XPOST url
#發送post請求時,通常需要指定請求體數據。可以使用-d或--data來指定發送的請求體。
curl -XPOST -d "name=leo&age=12" url
# 如果需要對請求數據進行urlencode,可以使用下麵的方式:
curl -XPOST --data-urlencode "name=leo&age=12" url
# 此外發送post請求還可以有如下幾種子選項:
–data-raw
–data-ascii
–data-binary
本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16317538.html