linux命令_curl

来源:https://www.cnblogs.com/ivanlee717/archive/2022/05/27/16317538.html
-Advertisement-
Play Games

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 --referer 【參考】 (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 --dump-header (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 --continue-at 斷點續轉,從文件頭的指定位置開始繼續下載/上傳; offset續傳開始的位置,如果offset值為“-”,curl會自動從文件中識別起始位置開始傳輸;
-r --range (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 --request (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 --retry-delay --retry-max-time 失敗重試次數; 重試間隔時間; 最大重試時間;
-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將下載的數據寫入到文件,必須使用文件的絕對地址:

image-20220527104330913

選項-o將下載數據寫入到指定名稱的文件中,並使用--progress顯示進度條:

image-20220527105830391

斷點續傳

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"

image-20220527135714516

將cookie另存為一個文件,使用--cookie-jar選項:

curl URL --cookie-jar cookie_file

用curl設置用戶代理字元串

有些網站訪問會提示只能使用IE瀏覽器來訪問,這是因為這些網站設置了檢查用戶代理,可以使用curl把用戶代理設置為IE,這樣就可以訪問了。使用--user-agent或者-A選項:

curl URL --user-agent "Mozilla/5.0"
curl URL -A "Mozilla/5.0"

image-20220527140752903

其他HTTP頭部信息也可以使用curl來發送,使用-H"頭部信息" 傳遞多個頭部信息,例如:

curl -H "Host:www.baidu.com" -H "accept-language:zh-cn" URL

image-20220527141000811

curl的帶寬控制和下載配額

使用--limit-rate限制curl的下載速度:

curl URL --limit-rate 50k

命令中用k(千位元組)和m(兆位元組)指定下載速度限制。

使用--max-filesize指定可下載的最大文件大小:

curl URL --max-filesize bytes

如果文件大小超出限制,命令則返回一個非0退出碼,如果命令正常則返回0。

只列印響應頭部信息

通過-I或者-head可以只列印出HTTP頭部信息:

image-20220527141143729

增加頭部信息

有時需要在 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&param2=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
> 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

image-20220527142613190

本文來自博客園,作者:ivanlee717,轉載請註明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16317538.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Conda 創建 Python 虛擬環境不純凈的問題(2021.1.18) 1. 產生環境 Ubuntu 16.04; Conda 4.9.2; Python 3.6; 2. 問題描述 通過 Conda 命令創建 Python 虛擬環境後,利用 pip list 命令查看包列表,發現有很多多餘的包, ...
  • SpringBoot MySQL密碼等敏感信息加密方案(2021.04.27) 一、背景說明 SpringBoot 項目經常將連接資料庫的密碼明文放在配置文件里,安全性就比較低,尤其一些企業對安全性要求很高,因此我們就考慮如何對密碼等敏感信息進行加密。 二、解決方案 通過 Jasypt 對密碼等敏感 ...
  • IO問題一直是面試的重災區之一 但又是非常重要而且面試必問的知識點 一個工作了7年的粉絲私信我,他去面試了 4家互聯網公司, 有三個公司問他網路IO的問題,另外一個公司問了Netty,結果都沒回答上來。 好吧,對於“IO和NIO的區別”,看看普通人和高手的回答。 普通人: 嗯。。。。。。。。。。 高 ...
  • 0、重寫博文的原因 當初我的SpringBoot系列的知識是採用分節來寫的,即:每一個知識點為一篇博文,但是:最近我霉到家了,我發現有些博文神奇般地打不開了,害我去找當初的markdown筆記,但是方便的話還是線上版舒服,只要有網就可以訪問,因此昨天晚上東拼西湊搞出了這篇SpringBoot基礎系列 ...
  • 眾所周知,synchronized和Lock鎖是java併發編程中兩大利器,可以用來解決線程安全的問題。但是為什麼Java有了synchronized之後還是提供了Lock介面這個api,難道僅僅只是重覆造了輪子這麼簡單麽?本文就來探討一下這個問題。 談到這個問題,其實很多同學第一反應都會說,Loc ...
  • 當我們在寫一篇文章時,為了讓文章看起來不那麼沉悶無趣,通常我們會選擇在文章里添加有趣的圖片或者選擇圖片作為背景。那麼今天本文將通過C#/VB.NET來為大家詳細介紹如何設置圖片背景。只需短短幾步便可實現此功能。歡迎大家積极參与討論和交流分享。下麵是我整理的具體方法和步驟。 dll文件安裝(3種方法) ...
  • 轉載請註明來源 https://www.cnblogs.com/brucejiao/p/16188865.html 謝謝! 轉載請註明來源 https://www.cnblogs.com/brucejiao/p/16188865.html 謝謝! 轉載請註明來源 https://www.cnblog ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 本文介紹了在jenkins中maven的安裝及配置(安裝maven及jdk的方法),以及如何在jenkins中創建maven任務。 有三點需要註意的地方。 maven一定要安裝在jenkins伺服器上。 maven安裝之前要先安裝jdk。 建任務 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...