首頁 > 運維 > linux運維 > linux curl是什麼

linux curl是什麼

青灯夜游
發布: 2023-04-20 17:05:46
原創
3429 人瀏覽過

在linux中,curl是一個非常實用的、用來與伺服器之間傳輸資料的工具,是利用URL規則在命令列下工作的檔案傳輸工具;它支援檔案的上傳和下載,是綜合傳輸工具。 curl提供了一大堆非常有用的功能,包括代理存取、使用者認證、ftp上傳下載、HTTP POST、SSL連線、cookie支援、斷點續傳等等。

linux curl是什麼

本教學操作環境: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支援、斷點續傳...。

一、最常用的curl指令

#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

二、curl指令語法與curl指令參數詳解

1、curl指令語法

curl [options] [URL...]
登入後複製

2、curl指令參數詳解

由於linux curl功能十分強大,所以指令參數十分多,下表只是愛E族(aiezu.com)帥選出來的部分參數,更多參數請執行「man curl」指令查看。

--proxy [protocol:// [user:pwd@]host[:port] http_proxy、HTTPS_PROXY、socks4、socks4a、socks5; 如: --proxy 8.8.8.8:8080; --proxytunnel --socks4a --socks5 使用SOCKS4A代理程式; 此參數會覆寫「-x」參數;#--basic(HTTP)告訴curl使用HTTP Basic authentication(HTTP協定時),這是預設認證方式;--ntlm(HTTP)使用NTLM驗證方式,用於HTTP協定;#--digest(HTTP)使用HTTP Digest authentication加密,用於HTTP協定;--negotiate (HTTP)使用GSS-Negotiate authentication方式,用於HTTP協定;--anyauth (HTTP)告訴curl自動選擇適當的身份認證方法,並選用最安全的方式;-u user:password使用使用者名稱、密碼認證,此參數會覆寫「-n」、「--netrc」和「--netrc-optional」選項;-E <證書[:密碼]>#(SSL)指定「PEM」格式的憑證檔案與憑證密碼;#--cert-type (SSL)告訴curl所提供憑證的類型:PEM、DER、ENG等;##-- 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#-B --use-ascii--disable-epsv--disable-eprt限速##-y --speed-time < time>#-Y --speed-limit 停用輸出流緩衝;啟用輸出流緩衝;##-L(HTTP/HTTPS)跟隨http回應頭「Location:」定向到跳轉後的頁面; (在http回應碼為3XX時使用,如301跳轉、302跳轉)(HTTP/HTTPS)同“--location”,但跳轉後來會發送跳轉前的使用者名稱和密碼;--compressed(HTTP)請求對返回內容使用壓縮演算法進行壓縮;curl支援對gzip壓縮進行解壓縮;#-m seconds --max-time seconds安靜模式。不要顯示進度表或錯誤訊息;# --progress-bar顯示進度列;錯誤-f --fail(HTTP)連線失敗時(400以上錯誤)不回傳預設錯誤頁面,而是回傳一個curl錯誤碼「22」; --show-error安靜模式下顯示錯誤訊息;錯誤訊息儲存檔案;##輸出-o file --output file   curl "http://aiezu.com/ {a,b}.txt" -o "#1.txt";   如果要根據規則建立保存目錄,參考:“--create-dirs” 指定“-”將定向到標準輸出“如控制台” ; -O#將傳回內容輸出到目前目錄下,且在url中檔案名稱相同的檔案中(不含目錄);--create-dirs##轉儲檔案中新增時間資訊;-K從設定檔讀取參數,參考:http://curl.haxx .se/docs/-v顯示更詳細的信息,調試時使用;幫助-M顯示完整的幫助手冊;##-h --help #

curl -h 的完整參數解釋:

參數組 參數 描述
#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]


使用HTTP代理存取;如果未指定端口,預設使用8080端口;
protocol預設為http_proxy,其他可能的值包括:
-x "http_proxy://aiezu:123@aiezu.com:80"



-p

將「-x」參數的代理,作為通道的方式去代理非HTTP協議,如ftp;



--socks4

使用SOCKS4代理程式;
使用SOCKS5代理程式;






################################## ###--proxy-anyauth### --proxy-basic### --proxy-diges### --proxy-negotiate### --proxy-ntlm######http代理認證方式,參考:### --anyauth### --basic### --diges### --negotiate### --ntlm############-U ### --proxy-user ######設定代理程式的使用者名稱和密碼;###########資料### 傳送### ###-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= -F name=content
--form name=content
(HTTP)使用HTTP POST方式發送類似「表單欄位」的多類型數據,相當於同時設定瀏覽器表單屬性( method="POST",enctype="multipart/form-data"),可以使用此參數上傳二進位。

如果欄位內容以「@」開頭,剩下的部分應該是文件名,curl將會上傳此文件,如:
curl -F "pic=@pic.jpg" http:/ /aiezu.com;
curl -F "page=@a.html;type=text/html" http://aiezu.com
curl -F "page=@/tmp/a;filename=a .txt" http://aiezu.com

如果欄位內容以「<」開頭,剩下的部分應該是檔案名,curl將從檔案中取得作為此欄位的值,如:curl -F "text=
#--form-string (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 -
此參數也可以使用萬用字元:
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位元組;


## 認證
一般用於IIS使用NTLM的網站;
配合「-u/--user」選項,防止密碼使用明文方式傳送;
它主要目的是為它的主要目的是為kerberos5認證提供支援支援;
--user user :password

如果你只提供用戶名,curl會要求你輸入密碼;

如果你使用「SSPI」開啟的curl函式庫做「NTLM」認證,可以使用不含用戶名密碼的「-u:」選項,強制curl使用目前登入的使用者名稱密碼進行認證;

此參數相當於設定http 頭「Authorization:」;
--cert <憑證[:密碼]>
預設為“PEM”;
--cacert (SSL)告訴curl所以指定的CA憑證文件,必須是“PEM”格式;
--capath (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)列出ftp檔案清單;

(FTP/LDAP)使用Ascii傳輸模式,用於FTP、LDAP;在ftp中相當與使用了「type=A;」模式。
(FTP)告訴curl在PASV(被動模式)時不要使用EPSV;
(FTP)告訴curl在主動模式時禁用EPRT和LPRT;
--limit- rate  限制curl使用的最大頻寬;如果未指定單位,預設單位為“bytes/秒”,你也可以指定單位為“K”、“M”、“G”等單位,如:“--limit-rate 1m”為限制最大使用頻寬為“1m位元組/秒”;
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 使用指定的網路卡介面存取;
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 < seconds> 設定keepalive時間
#--no-keepalive 關閉keepalive功能;


# --no-buffer
--buffer

--location

--location-trusted


--connect-timeout
指定最大連線逾時,單位「秒」;
限制整個curl操作的最長時間,單位為秒;

-s
--silent

-
選項

--retry
--retry-delay
--retry-max-time 

失敗重試次數;
重試間隔時間;
最大重試時間;



-S

--stderr
將回傳內容輸出到檔案。
如果是用過通配符獲取多個url,可以使用“#”後面跟著“數字序號”,curl會自動將它替換對應的關鍵字,如:
  將儲存為:「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
--remote-name

與「-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
--config
--verbose
--manual

linux curl用法幫助;
##可以使用「任何」驗證方法使用ASCII文字傳送        --data-ascii                      以二進位的方式post資料           使用EPRT或LPRT#--disable-epsv                         ##1#        為隨機資料( SSL)設定EGD socket路徑--tcp-nodelay                                  「客戶端憑證檔案與密碼(SSL)# #憑證檔案類型(DER/PEM/ENG) (SSL)--key                    ##--key-type                       ##-. -pass                          的           加密引擎使用(SSL). "--engine list" for list--cacert                       --capath                    CA目   (made using c_rehash) to verify peer against (SSL)##要求返回是壓縮的情勢(using 。 -dirs                          所odod ]--ftp-pasv                     ##--ftp-skip-pasv-ip                     模擬http表單提交資料#http 表單提交資料自訂頭資訊傳遞至伺服器忽略的HTTP頭訊息長度的長度##     #輸出時包含protocol頭資訊-I/--head                      #  -junk-session-cookies              讀取檔案時忽略「session cookie--interface --krb4                        #                   允許不使用憑證到SSL網站-K/--config                    #  #-l/--list-only                         #設置傳輸速度強制使用本地端口號設定最大傳輸時間o 設定最大讀取的目錄數--max-filesize                  設置最大下載的文件總量-M/--manual                            c            #從netrc檔案讀取使用者名稱與密碼--netrc-optional                       1                   #使用HTTP NTLM 驗證-N/--no-buffer                      選擇任何代理身分驗證方法##在代理程式上使用數位身分驗證-P/--ftp-port
               
#使用連接埠位址,而非使用PASV-Q/--##使用連接埠位址,而不是使用PASV-Q/--##使用連接埠位址,而不是使用PASV-Q/--##使用連接埠位址,而不是使用PASV-Q/--##使用連接埠地址;                       檔案傳送前,傳送指令至伺服器#1S? ;                          ##使用問題時,請重試的次數#ooowidoinw目標-LhhRd…##19  傳輸出現問題時,設定重試間隔時間--retry-max-time              傳輸出現問題時,設置最大重試時間-S/--show-error                        #   用socks4代理程式給定主機和連接埠--socks5                 # socks5代理程式給定主機和連接埠給定主機和連接埠為#socks5代理程式給定主機和連接埠給定主機和連接埠給定##-t/--telnet-option            Telnet選項設定--trace <file> 對指定文件進行debug--trace-ascii                    Like --跟踪但沒有hex輸出--trace-time                           ;212111111000時間/條件#>                  》 Spet URL to work with-U/--proxy-user       #設定代理使用者名稱與密碼-V/--version                   ##顯示版本資訊指定什麼指令-y/--speed-time                放棄限速所需的時間。默認為30-0/--http1.0   ##-1/--tlsv1                     #使用TLSv1(SSL 項目#如果之一[分配      使用SSLv2的(SSL)-3/--sslv3                    ”」v3(SSv3(SSv3(SSv3(S
-a/--append                          #                     
--basic                     /--use-ascii                         
HTTP POST方式傳送資料
ascii的方式使用post資料##1--data##-#--data ascii的方式12##1-- ;data>                   
##     使用HTTP驗證
#--digest                               
--ciphers                         #         
建立本地目錄的目錄層級結構##11              #上傳是將LF轉換成CRLF
--ftp-create-dirs                       #若遠端目錄不存在,並建立遠端目錄
控制CWD的使用
使用PASV的時候,忽略此IP位址              #嘗試用SSL/TLS 來進行ftp資料傳輸
--ftp-ssl-reqd                  c  -F/--form                
#-form-string <name=string> ;             
-g/--globoff        使用{}而[]
-G/--get                        ”#1 -help                              1 #1       
#--ignore-content-length                
#1p目錄        
--local-port                      
- m/--max-time                 
o
-p/--proxytunnel                        #使用HT1       
--proxy-basic                         #               
--proxy-ntlm                       
#     讀取(SSL)的隨機檔案
-R/--remote-time                        #「在本機產生檔案」時,保留遠端檔案時間
 
-Y/--speed-limit                停止傳輸速度的限制,速度時間'秒
-z/--time-cond                  傳送時間設定
-0/--http1.0   
-0/--http1.0  
SSLv3(S
S##Sv3(S#########S##SSLv3(S#########S##SSLv3(S#########S##SSLv3(S#########S##SSLv3(S####)v 3p-quote                     ######like -Q for thesource URL for 3rd party transfer      ######使用url,進行第三方傳送############--3p-user                      #######使用使用者名稱與密碼,並使用第三者傳送#####1-- ######使用IP4############-6/--ipv6                     # 

三、Linux curl命令退出碼

下面是linux curl命令的錯誤代碼和她們的相應的錯誤訊息,可能會出現在惡劣的環境中。

##3# URL 格式錯誤。語法不正確。5#無法解析代理程式。無法解析給定的代理主機。6無法解析主機。給定的遠端主機未解析。7無法連線到主機。##89111314151718192122#232526272830313334353637383941424345474849 51# 52#53##54無法將SSL 加密引擎設定為預設值。55傳送網路資料失敗。56接收網路資料失敗。58##本機憑證有問題。無法使用指定的SSL 密碼。無法使用對等憑證進行身份驗證已知的CA 憑證。無法識別的傳輸編碼。LDAP URL 無效。 超出最大檔案大小。##64##65發送資料需要倒帶失敗。66初始化SSL 失敗Engine.67使用者名稱、密碼或類似內容未被接受,curl 無法登入。##70TFTP 伺服器磁碟空間不足。#71非法 TFTP 操作。##72#7374#75767778##79 SSH 會話期間發生未指定的錯誤。80無法關閉SSL 連線。82無法載入CRL 文件,格式遺失或錯誤(在7.19.0 中新增)。83頒發者檢查失敗(在7.19.0 中新增)。 0).XX將在未來版本中出現更多錯誤代碼。現有的永遠不會改變。

四、常見用法

1、下載(option:-o或option:-O)

1.1、下載頁面:

curl -o dodo1.jpg http:www.linux.com/dodo1.JPG
#要注意-O這裡後面的url要具體到某個文件,不然抓不下來
curl -O http://www.linux.com/dodo1.JPG

1.2:循環下載
有時候下載圖片可以能是前面的部分名稱是一樣的,就最後的尾椎名不一樣。這樣就會把dodo1,dodo2,dodo3,dodo4,dodo5全部保存下來
curl -O http://www.linux.com/dodo[1-5].JPG

#1.3:下載重命名
在hello/dodo1.JPG的檔案下載下來就會變成hello_dodo1.JPG,其他檔案依此類推,從而有效的避免了檔案被覆蓋
curl -o #1_#2.JPG http: //www.linux.com/{hello,bb}/dodo[1-5].JPG

#由於下載的hello與bb中的檔名都是dodo1,dodo2,dodo3,dodo4,dodo5。因此第二次下載的會把第一次下載的覆蓋,這樣就需要重新命名檔案。
curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG

1.4:分塊下載(option:-r)
curl -r 0-100 -o dodo1_part1.JPG http://www.linux.com/dodo1.JPG
curl -r 100-200 -o dodo1_part2.JPG http://www.linux.com/dodo1. JPG
curl -r 200- -o dodo1_part3.JPG http://www.linux.com/dodo1.JPG
cat dodo1_part* > dodo1.JPG  #這樣就可以查看dodo1.JPG的內容了

#1.5:透過ftp下載文件(option:-u)
curl可以透過ftp下載文件,curl提供兩種從ftp下載的語法
curl -O -u 使用者名稱:密碼ftp ://www.linux.com/dodo1.JPG
curl -O ftp://使用者名稱:密碼@www.linux.com/dodo1.JPG

1.6:下載,顯示進度條( option:-#)或不顯示進度條(option:-s)
curl -# -O http://www.linux.com/dodo1.JPG  
curl -s -O http://www .linux.com/dodo1.JPG

1.7、下載,斷點續傳(-C )
斷點續轉,從檔案頭的指定位置開始繼續下載/上傳; offset續傳開始的位置,如果offset值為“-”,curl會自動從文件中識別起始位置開始傳輸;
curl -# -o centos6.8.iso -C - http://mirrors. aliyun.com/centos/6.8/isos/x86_64/CentOS-6.8-x86_64-minimal.iso
curl -C -O http://www.linux.com/dodo1.JPG

2、上傳檔案(option:-T)curl -T dodo1.JPG -u 使用者名稱:密碼ftp://www.linux.com/img/



3、偽造來源頁面|偽造referer|盜鏈(option:-e)

很多伺服器會檢查http訪問的referer從而來控制存取。例如:你是先訪問首頁,然後再訪問首頁中的郵箱頁面,這裡訪問郵箱的referer地址就是訪問首頁成功後的頁面地址,如果伺服器發現對郵箱頁面訪問的referer地址不是首頁的地址,就斷定那是個盜連了 #這樣就會讓伺服器其以為你是從www.linux.com點擊某個連結過來的 curl -e "www.linux.com" http://mail.linux. com #告訴愛E族,我是從百度來的 curl -e http://baidu.com http://aiezu.com


##4、偽造代理設備(模仿瀏覽器)



有些網站需要使用特定的瀏覽器去訪問他們,有些還需要使用某些特定的版本。 curl內建option:-A可以讓我們指定瀏覽器去訪問網站
curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com

#告訴愛E族,我是GOOGLE爬蟲蜘蛛(其實我是curl指令)

curl -A " Mozilla/5.0 (compatible; Googlebot/2.​​1; http://www.google.com/bot.html)" http: //aiezu.com #告訴愛E族,我用的是微信內建瀏覽器 curl -A "Mozilla/5.0 AppleWebKit/600 Mobile MicroMessenger/6.0" http://aiezu.com


5、設定http請求



5.1、設定http請求標頭(或option:-H或option:--head)

curl -H "Cache-Control:no-cache"  http://aiezu.com

#5.2、指定proxy伺服器以及其連接埠(option::-x) #很多時候上網需要用到代理伺服器(例如使用代理伺服器上網或因為使用curl別人網站而被別人屏蔽IP位址的時候),幸運的是curl透過使用內建option:-x來支援設定代理 curl -x 192.168.100.100 :1080 http://www.linux.com

######6、http回應頭#########

6.1、查看http回應頭(option:-I)
# 看看本站的http頭是怎麼樣的
curl -I  http://aiezu.com
輸出:
HTTP/1.1 200 OK
Date: Fri, 25 Nov 2016 16:45:49 GMT
Server: Apache
Set-Cookie: rox__Session=abdrt8vesprhnpc3f63p1df7j4; path=/#cire Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary : Accept-Encoding
Content-Type: text/html; charset=utf-8
 
6.2、儲存http的response裡面的header資訊(option:-D)
curl -D cookied. txt http://www.linux.com
執行後cookie訊息就被存到了cookied.txt裡面了
注意:-c(小寫)產生的cookie和-D裡面的cookie是不一樣的。

7、傳送表單資料

curl -F "pic=@logo.png" -F "site=aiezu"  http:/ /aiezu.com/

8、cookie

#8.1、發送cookie(option:-b)

#有些網站是使用cookie來記錄session資訊。對於chrome這樣的瀏覽器,可以輕易處理cookie訊息,但在curl中只要增加相關參數也是可以很容易的處理cookie
curl -b "domain=aiezu.com"  http://aiezu.com
#很多網站都是透過監視你的cookie資訊來判斷你是否按規矩造訪他們的網站的,因此我們需要使用已儲存的cookie資訊。內建option: -b
curl -b cookiec.txt http://www.linux.com

#8.2、儲存http的response裡面的cookie訊息(option:-c)

執行後http的response裡面的cookie資訊就被存到了cookiec.txt裡面了
curl -c cookiec.txt  http://www.linux.com

9、測試一個網址

9.1、測試一個網址是否可達

curl -v http://www.linux.com

9.2、測試網頁回傳值(option: -w [format])

curl -o /dev/null -s -w %{http_code} www.linux.com

10、儲存造訪的網頁(> >)

2.1:使用linux的重定向功能儲存

curl http://www.linux.com >> linux.html

#11、請求方式

curl -i -v -H '' -X POST -d '' http:www.test.com/a/b

其中,-X POST -d, -X GET -d, -X PUT -d 分別等價於-F, -G -d, -P

以post請求為例:

11.1 、 -X POST -d
(11.1.1)、POST application/x-www-form-urlencoded
application/x-www-form-urlencoded是預設的
curl -X POST -d "param1 =value1¶m2=value2" http://localhost:3000/data
等價於
curl -H "Content-Type:application/x-www-form-urlencoded" -X POST -d "param1=value1¶m2 =value2" http://localhost:3000/data
使用資料檔
curl -X POST -d "@data.txt" http://localhost:3000/data
其中data.txt內容如下:param1=value1¶m2=value2

(11.1.2)、POST application/json

curl -H "Content-Type:application/json" -X POST -d '{"key1":" value1","key2":"value2"}' http://localhost:3000/data
使用資料檔案的話:
curl -X POST -d "@data.json" http://localhost: 3000/data
其中data.json內容如下:{"key1":"value1","key2":"value2"}
再舉例:
curl -H "Content-type:application /json" -X POST -d "{\"app_key\":\"$appKey\",\"time_stamp\":\"$time\"}" http://www.test.com.cn/a /b

11.2、-F

curl  -v -H "token: 222" -F "file=@/Users/fungleo/Downloads/401.png" localhost:8000/api/v1/upimg 

curl -f http://www.linux.com/error

11.3、其它舉例

(11.3.1)、

curl  -X POST "http://www.test.com/e/f" -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" \

-d "a=b" \
-d "c=d" \
-d "e=f" \
-d "g=h"

(11.3.2)、錯誤:curl -i -G -d "a=b#1&c=d" http://www.test.com/e/f

正確:要把參數值是特殊符號的用urlencode轉換過來
curl -i -G -d "a=b#1&c=d" http://www.test.com/e/f

#12、偵錯

curl -v可以显示一次http通信的整个过程,包括端口连接和http request头信息。
如果觉得还不够,那么下面的命令可以查看更详细的通信过程:
curl --trace output.txt www.baidu.com 或者 curl --trace-ascii output.txt www.baidu.com 
运行后,请打开output.txt文件查看。
curl --trace output.txt  http://www.baidu.com
curl --trace-ascii output2.txt  http://www.baidu.com
curl --trace output3.txt --trace-time http://www.baidu.com
curl --trace-ascii output4.txt --trace-time http://www.baidu.com 

举例:有需求每5分钟请求一次http://www.test.com/a/b生成一个日志文件。希望一月的日志(正确的和错误的)能写入一个日志文件
day=`date +%F`
logfile='/var/logs/www.test.com_'`date +%Y%m`'.log'
/usr/bin/echo -e "\n\n[${day}] Start request \n " >> ${logfile}
/bin/curl -v "http://www.test.com/a/b" -d "ccccc" 1>> ${logfile} 2>> ${logfile} --trace-time
/usr/bin/echo -e "\n\n[${day}] End request\n" >> ${logfile}

13、显示抓取错误

curl -f http://www.linux.com/error
登入後複製

相关推荐:《Linux视频教程

退出碼 錯誤描述
#1 不支援的協定。此版本的curl 不支援此協定。
2 初始化失敗。
#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 加密引擎找不到。
59
60
61
62
63
##請求的FTP SSL 等級失敗。
68 TFTP 伺服器上找不到檔案。
#69 TFTP 伺服器上的權限問題。
未知TFTP 傳輸ID。
檔案已存在(TFTP)。
沒有這樣的使用者(TFTP)。
字元轉換失敗。
需要字元轉換函數。
讀取SSL CA 憑證時出現問題(路徑?存取權限? ).
URL中引用的資源不存在。

以上是linux curl是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板