天天看點

Linux curl指令詳解使用curl指令測試REST服務

原文位址:http://ju.outofmemory.cn/entry/84875

使用curl指令測試REST服務

cURL 是很友善的Rest客戶端,可以很友善的完成許多Rest API測試的需求,甚至,如果是需要先登入或認證的rest api,也可以進行測試,利用curl指令,可以送出HTTP GET, POST, PUT, DELETE, 也可以改變 HTTP header來滿足使用REST API需要的特定條件。

curl的參數很多,這邊僅列出目前測試REST時常用到的:

-X/--request [GET|POST|PUT|DELETE|…]使用指定的http method發出 http request
-H/--header                           設定request裡的header
-i/--include                          顯示response的header
-d/--data                             設定 http parameters 
-v/--verbose                          輸出比較多的訊息-u/--user                             使用者帳號、密碼-b/--cookie                           cookie  
           
linux command line 的參數常,同一個功能常會有兩個功能完全相同參數,一個是比較短的參數,前面通常是用

-

(一個

-

)導引符號,另一個比較長的參數,通常會用

--

(兩個

-

)導引符號

在curl 使用說明

-X,--request COMMAND  Specify request command to use--resolve HOST:PORT:ADDRESS  Force resolve of HOST:PORT to ADDRESS
      --retry NUM   Retry request NUM times iftransient problems occur
      --retry-delay SECONDS When retrying, wait this many seconds between each
      --retry-max-time SECONDS  Retry only within this period>
           
參數

-X

--request

兩個功能是一樣的,是以使用時

ex:curl -X POST http://www.example.com/

curl --request POST http://www.example.com/

是相等的功能

GET/POST/PUT/DELETE使用方式

-X 後面加 http method,

curl -X GET "http://www.rest.com/api/users"
curl -X POST "http://www.rest.com/api/users"
curl -X PUT "http://www.rest.com/api/users"
curl -X DELETE "http://www.rest.com/api/users"
           

url要加引號也可以,不加引號也可以,如果有非純英文字或數字外的字元,不加引號可能會有問題,如果是網碼過的url,也要加上引號

HEADER

在http header加入的訊息

HTTP Parameter

http參數可以直接加在url的query string,也可以用

-d

帶入參數間用

&

串接,或使用多個

-d

# 使用`&`串接多個參數
curl -X POST -d "param1=value1&param2=value2"# 也可使用多個`-d`,效果同上
curl -X POST -d "param1=value1"-d "param2=value2"
curl -X POST -d "param1=a 0space"# "a space" url encode後空白字元會編碼成'%20'為"a%20space",編碼後的參數可以直接使用
curl -X POST -d "param1=a%20space"
           

post json 格式得資料

如同時需要傳送request parameter跟json,request parameter可以加在url後面,json資料則放入

-d

的參數,然後利用單引號將json資料含起來(如果json內容是用單引號,-d的參數則改用雙引號包覆),header要加入”Content-Type:application/json”跟”Accept:application/json”

curl http://www.example.com?modifier=kent -X PUT -i -H "Content-Type:application/json" -H "Accept:application/json" -d '{"boolean" : false, "foo" : "bar"}'# 不加"Accept:application/json"也可以
curl http://www.example.com?modifier=kent -X PUT -i -H "Content-Type:application/json" -d '{"boolean" : false, "foo" : "bar"}'
           

需先認證或登入才能使用的service

許多服務,需先進行登入或認證後,才能存取其API服務,依服務要求的條件,的curl可以透過cookie,session或加入在header加入session key,api key或認證的token來達到認證的效果。

session 例子:

後端如果是用session記錄使用者登入資訊,後端會傳一個 session id給前端,前端需要在每次跟後端的requests的header中置入此session id,後端便會以此session id識別前端是屬於那個session,以達到session的效果

cookie 例子

如果是使用cookie,在認證後,後端會回一個cookie回來,把該cookie成檔案,當要存取需要任務的url時,再用

-b cookie_file

的方式在request中植入cookie即可正常使用

# 將cookie存檔
curl -i -X POST -d username=kent -d password=kent123 -c  ~/cookie.txt  http://www.rest.com/auth
# 載入cookie到request中 
curl -i --header "Accept:application/json"-X GET -b ~/cookie.txt http://www.rest.com/users/1
           

檔案上傳

這個是透過 HTTP multipart POST 上傳資料,

-F

是使用http query parameter的方式,指定檔案位置的參數要加上

@

HTTP Basic Authentication (HTTP基本認證)

如果網站是採HTTP基本認證, 可以使用

--user username:password

登入

認證失敗時,會是

401Unauthorized

HTTP/1.1401UnauthorizedServer:Apache-Coyote/1.1
X-Content-Type-Options: nosniff
X-XSS-Protection:1; mode=block
Cache-Control:no-cache,no-store, max-age=0, must-revalidate
Pragma:no-cache
Expires:0
X-Frame-Options: DENY
WWW-Authenticate:Basic realm="Realm"Content-Type: text/html;charset=utf-8Content-Language: en
Content-Length:1022Date:Thu,15May201406:32:49 GMT
           

認證通過時,會回應

200 OK

HTTP/1.1200 OK
Server:Apache-Coyote/1.1
X-Content-Type-Options: nosniff
X-XSS-Protection:1; mode=block
Cache-Control:no-cache,no-store, max-age=0, must-revalidate
Pragma:no-cache
Expires:0
X-Frame-Options: DENY
Set-Cookie: JSESSIONID=A75066DCC816CE31D8F69255DEB6C30B;Path=/mdserver/;HttpOnlyContent-Type: application/json;charset=UTF-8Transfer-Encoding: chunked
Date:Thu,15May201406:14:11 GMT
           

可以把認證後的cookie存起來,重複使用

登入之前暫存的cookies,可以不用每次都認證

原文位址:http://www.linuxdiyf.com/linux/2800.html

指令:curl

在Linux中curl是一個利用URL規則在指令行下工作的檔案傳輸工具,可以說是一款很強大的http指令行工具。它支援檔案的上傳和下載下傳,是綜合傳輸工具,但按傳統,習慣稱url為下載下傳工具。

文法:# curl [option] [url]

常見參數:

-A/--user-agent <string>              設定使用者代理發送給伺服器

-b/--cookie <name=string/file>    cookie字元串或檔案讀取位置

-c/--cookie-jar <file>                    操作結束後把cookie寫入到這個檔案中

-C/--continue-at <offset>            斷點續轉

-D/--dump-header <file>              把header資訊寫入到該檔案中

-e/--referer                                  來源網址

-f/--fail                                          連接配接失敗時不顯示http錯誤

-o/--output                                  把輸出寫到該檔案中

-O/--remote-name                      把輸出寫到該檔案中,保留遠端檔案的檔案名

-r/--range <range>                      檢索來自HTTP/1.1或FTP伺服器位元組範圍

-s/--silent                                    靜音模式。不輸出任何東西

-T/--upload-file <file>                  上傳檔案

-u/--user <user[:password]>      設定伺服器的使用者和密碼

-w/--write-out [format]                什麼輸出完成後

-x/--proxy <host[:port]>              在給定的端口上使用HTTP代理

-#/--progress-bar                        進度條顯示目前的傳送狀态

例子:

1、基本用法

# curl http://www.linux.com

執行後,www.linux.com 的html就會顯示在螢幕上了

Ps:由于安裝linux的時候很多時候是沒有安裝桌面的,也意味着沒有浏覽器,是以這個方法也經常用于測試一台伺服器是否可以到達一個網站

2、儲存通路的網頁

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

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

2.2:可以使用curl的内置option:-o(小寫)儲存網頁

$ curl -o linux.html http://www.linux.com

執行完成後會顯示如下界面,顯示100%則表示儲存成功

% Total    % Received % Xferd  Average Speed  Time    Time    Time  Current

                                Dload  Upload  Total  Spent    Left  Speed

100 79684    0 79684    0    0  3437k      0 --:--:-- --:--:-- --:--:-- 7781k

2.3:可以使用curl的内置option:-O(大寫)儲存網頁中的檔案

要注意這裡後面的url要具體到某個檔案,不然抓不下來

# curl -O http://www.linux.com/hello.sh

3、測試網頁傳回值

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

Ps:在腳本中,這是很常見的測試網站是否正常的用法

4、指定proxy伺服器以及其端口

很多時候上網需要用到代理伺服器(比如是使用代理伺服器上網或者因為使用curl别人網站而被别人屏蔽IP位址的時候),幸運的是curl通過使用内置option:-x來支援設定代理

# curl -x 192.168.100.100:1080 http://www.linux.com

5、cookie

有些網站是使用cookie來記錄session資訊。對于chrome這樣的浏覽器,可以輕易處理cookie資訊,但在curl中隻要增加相關參數也是可以很容易的處理cookie

5.1:儲存http的response裡面的cookie資訊。内置option:-c(小寫)

# curl -c cookiec.txt  http://www.linux.com

執行後cookie資訊就被存到了cookiec.txt裡面了

5.2:儲存http的response裡面的header資訊。内置option: -D

# curl -D cookied.txt http://www.linux.com

執行後cookie資訊就被存到了cookied.txt裡面了

注意:-c(小寫)産生的cookie和-D裡面的cookie是不一樣的。

5.3:使用cookie

很多網站都是通過監視你的cookie資訊來判斷你是否按規矩通路他們的網站的,是以我們需要使用儲存的cookie資訊。内置option: -b

# curl -b cookiec.txt http://www.linux.com

6、模仿浏覽器

有些網站需要使用特定的浏覽器去通路他們,有些還需要使用某些特定的版本。curl内置option:-A可以讓我們指定浏覽器去通路網站

# curl -A "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0)" http://www.linux.com

這樣伺服器端就會認為是使用IE8.0去通路的

7、僞造referer(盜鍊)

很多伺服器會檢查http通路的referer進而來控制通路。比如:你是先通路首頁,然後再通路首頁中的郵箱頁面,這裡通路郵箱的referer位址就是通路首頁成功後的頁面位址,如果伺服器發現對郵箱頁面通路的referer位址不是首頁的位址,就斷定那是個盜連了

curl中内置option:-e可以讓我們設定referer

# curl -e "www.linux.com" http://mail.linux.com

這樣就會讓伺服器其以為你是從www.linux.com點選某個連結過來的

8、下載下傳檔案

8.1:利用curl下載下傳檔案。

#使用内置option:-o(小寫)

# curl -o dodo1.jpg http:www.linux.com/dodo1.JPG

#使用内置option:-O(大寫)

# curl -O http://www.linux.com/dodo1.JPG

這樣就會以伺服器上的名稱儲存檔案到本地

8.2:循環下載下傳

有時候下載下傳圖檔可以能是前面的部分名稱是一樣的,就最後的尾椎名不一樣

# curl -O http://www.linux.com/dodo[1-5].JPG

這樣就會把dodo1,dodo2,dodo3,dodo4,dodo5全部儲存下來

8.3:下載下傳重命名

# curl -O http://www.linux.com/{hello,bb}/dodo[1-5].JPG

由于下載下傳的hello與bb中的檔案名都是dodo1,dodo2,dodo3,dodo4,dodo5。是以第二次下載下傳的會把第一次下載下傳的覆寫,這樣就需要對檔案進行重命名。

# curl -o #1_#2.JPG http://www.linux.com/{hello,bb}/dodo[1-5].JPG

這樣在hello/dodo1.JPG的檔案下載下傳下來就會變成hello_dodo1.JPG,其他檔案依此類推,進而有效的避免了檔案被覆寫

8.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的内容了

8.5:通過ftp下載下傳檔案

curl可以通過ftp下載下傳檔案,curl提供兩種從ftp中下載下傳的文法

# curl -O -u 使用者名:密碼 ftp://www.linux.com/dodo1.JPG

# curl -O ftp://使用者名:密碼@www.linux.com/dodo1.JPG

8.6:顯示下載下傳進度條

# curl -# -O http://www.linux.com/dodo1.JPG

8.7:不會顯示下載下傳進度資訊

# curl -s -O http://www.linux.com/dodo1.JPG

9、斷點續傳

在windows中,我們可以使用迅雷這樣的軟體進行斷點續傳。curl可以通過内置option:-C同樣可以達到相同的效果

如果在下載下傳dodo1.JPG的過程中突然掉線了,可以使用以下的方式續傳

# curl -C -O http://www.linux.com/dodo1.JPG

10、上傳檔案

curl不僅僅可以下載下傳檔案,還可以上傳檔案。通過内置option:-T來實作

# curl -T dodo1.JPG -u 使用者名:密碼 ftp://www.linux.com/img/

這樣就向ftp伺服器上傳了檔案dodo1.JPG

11、顯示抓取錯誤

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

其他參數(此處翻譯為轉載):

-a/--append                        上傳檔案時,附加到目标檔案

--anyauth                            可以使用“任何”身份驗證方法

--basic                                使用HTTP基本驗證

-B/--use-ascii                      使用ASCII文本傳輸

-d/--data <data>                  HTTP POST方式傳送資料

--data-ascii <data>            以ascii的方式post資料

--data-binary <data>          以二進制的方式post資料

--negotiate                          使用HTTP身份驗證

--digest                        使用數字身份驗證

--disable-eprt                  禁止使用EPRT或LPRT

--disable-epsv                  禁止使用EPSV

--egd-file <file>              為随機資料(SSL)設定EGD socket路徑

--tcp-nodelay                  使用TCP_NODELAY選項

-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

--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 <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                  禁用緩沖輸出

-p/--proxytunnel                使用HTTP代理

--proxy-anyauth                選擇任一代理身份驗證方法

--proxy-basic                  在代理上使用基本身份驗證

--proxy-digest                  在代理上使用數字身份驗證

--proxy-ntlm                    在代理上使用ntlm身份驗證

-P/--ftp-port <address>        使用端口位址,而不是使用PASV

-Q/--quote <cmd>                檔案傳輸前,發送指令到伺服器

--range-file                    讀取(SSL)的随機檔案

-R/--remote-time                在本地生成檔案時,保留遠端檔案時間

--retry <num>                  傳輸出現問題時,重試的次數

--retry-delay <seconds>        傳輸出現問題時,設定重試間隔時間

--retry-max-time <seconds>      傳輸出現問題時,設定最大重試時間

-S/--show-error                顯示錯誤

--socks4 <host[:port]>          用socks4代理給定主機和端口

--socks5 <host[:port]>          用socks5代理給定主機和端口

-t/--telnet-option <OPT=val>    Telnet選項設定

--trace <file>                  對指定檔案進行debug

--trace-ascii <file>            Like --跟蹤但沒有hex輸出

--trace-time                    跟蹤/詳細輸出時,添加時間戳

--url <URL>                    Spet URL to work with

-U/--proxy-user <user[:password]>  設定代理使用者名和密碼

-V/--version                    顯示版本資訊

-X/--request <command>          指定什麼指令

-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

原文位址: http://www.thegeekstuff.com/2012/04/curl-examples/

下載下傳單個檔案,預設将輸出列印到标準輸出中(STDOUT)中

curl http://www.centos.org      

通過-o/-O選項儲存下載下傳的檔案到指定的檔案中:

-o:将檔案儲存為指令行中指定的檔案名的檔案中

-O:使用URL中預設的檔案名儲存檔案到本地

1 # 将檔案下載下傳到本地并命名為mygettext.html
2 curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
3 
4 # 将檔案儲存到本地并命名為gettext.html
5 curl -O http://www.gnu.org/software/gettext/manual/gettext.html      

同樣可以使用轉向字元">"對輸出進行轉向輸出

同時擷取多個檔案

1 curl -O URL1 -O URL2      

若同時從同一站點下載下傳多個檔案時,curl會嘗試重用連結(connection)。

通過-L選項進行重定向

預設情況下CURL不會發送HTTP Location headers(重定向).當一個被請求頁面移動到另一個站點時,會發送一個HTTP Loaction header作為請求,然後将請求重定向到新的位址上。

例如:通路google.com時,會自動将位址重定向到google.com.hk上。

1 curl http://www.google.com
 2 <HTML>
 3 <HEAD>
 4     <meta http-equiv="content-type" content="text/html;charset=utf-8">
 5     <TITLE>302 Moved</TITLE>
 6 </HEAD>
 7 <BODY>
 8     <H1>302 Moved</H1>
 9     The document has moved
10     <A HREF="http://www.google.com.hk/url?sa=p&amp;hl=zh-CN&amp;pref=hkredirect&amp;pval=yes&amp;q=http://www.google.com.hk/&amp;ust=1379402837567135amp;usg=AFQjCNF3o7umf3jyJpNDPuF7KTibavE4aA">here</A>.
11 </BODY>
12 </HTML>      

上述輸出說明所請求的檔案被轉移到了http://www.google.com.hk。

這是可以通過使用-L選項進行強制重定向

1 # 讓curl使用位址重定向,此時會查詢google.com.hk站點
2 curl -L http://www.google.com      

斷點續傳

通過使用-C選項可對大檔案使用斷點續傳功能,如:

1 # 當檔案在下載下傳完成之前結束該程序
2 $ curl -O http://www.gnu.org/software/gettext/manual/gettext.html
3 ##############             20.1%
4 
5 # 通過添加-C選項繼續對該檔案進行下載下傳,已經下載下傳過的檔案不會被重新下載下傳
6 curl -C - -O http://www.gnu.org/software/gettext/manual/gettext.html
7 ###############            21.1%      

對CURL使用網絡限速

通過--limit-rate選項對CURL的最大網絡使用進行限制

1 # 下載下傳速度最大不會超過1000B/second
2 
3 curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html      

下載下傳指定時間内修改過的檔案

當下載下傳一個檔案時,可對該檔案的最後修改日期進行判斷,如果該檔案在指定日期内修改過,就進行下載下傳,否則不下載下傳。

該功能可通過使用-z選項來實作:

1 # 若yy.html檔案在2011/12/21之後有過更新才會進行下載下傳
2 curl -z 21-Dec-11 http://www.example.com/yy.html      

CURL授權

在通路需要授權的頁面時,可通過-u選項提供使用者名和密碼進行授權

1 curl -u username:password URL
2 
3 # 通常的做法是在指令行隻輸入使用者名,之後會提示輸入密碼,這樣可以保證在檢視曆史記錄時不會将密碼洩露
4 curl -u username URL      

從FTP伺服器下載下傳檔案

CURL同樣支援FTP下載下傳,若在url中指定的是某個檔案路徑而非具體的某個要下載下傳的檔案名,CURL則會列出該目錄下的所有檔案名而并非下載下傳該目錄下的所有檔案

1 # 列出public_html下的所有檔案夾和檔案
2 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/
3 
4 # 下載下傳xss.php檔案
5 curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php      

上傳檔案到FTP伺服器

通過 -T 選項可将指定的本地檔案上傳到FTP伺服器上

# 将myfile.txt檔案上傳到伺服器
curl -u ftpuser:ftppass -T myfile.txt ftp://ftp.testserver.com

# 同時上傳多個檔案
curl -u ftpuser:ftppass -T "{file1,file2}" ftp://ftp.testserver.com

# 從标準輸入擷取内容儲存到伺服器指定的檔案中
curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt      

擷取更多資訊

通過使用 -v 和 -trace擷取更多的連結資訊

通過字典查詢單詞

1 # 查詢bash單詞的含義
2 curl dict://dict.org/d:bash
3 
4 # 列出所有可用詞典
5 curl dict://dict.org/show:db
6 
7 # 在foldoc詞典中查詢bash單詞的含義
8 curl dict://dict.org/d:bash:foldoc      

為CURL設定代理

-x 選項可以為CURL添加代理功能

1 # 指定代理主機和端口
2 curl -x proxysever.test.com:3128 http://google.co.in      

其他網站整理

儲存與使用網站cookie資訊

1 # 将網站的cookies資訊儲存到sugarcookies檔案中
2 curl -D sugarcookies http://localhost/sugarcrm/index.php
3 
4 # 使用上次儲存的cookie資訊
5 curl -b sugarcookies http://localhost/sugarcrm/index.php      

傳遞請求資料

預設curl使用GET方式請求資料,這種方式下直接通過URL傳遞資料

可以通過 --data/-d 方式指定使用POST方式傳遞資料

1 # GET
2 curl -u username https://api.github.com/user?access_token=XXXXXXXXXX
3 
4 # POST
5 curl -u username --data "param1=value1&param2=value" https://api.github.com
6 
7 # 也可以指定一個檔案,将該檔案中的内容當作資料傳遞給伺服器端
8 curl --data @filename https://github.api.com/authorizations      

注:預設情況下,通過POST方式傳遞過去的資料中若有特殊字元,首先需要将特殊字元轉義在傳遞給伺服器端,如value值中包含有空格,則需要先将空格轉換成%20,如:

1 curl -d "value%201" http://hostname.com      

在新版本的CURL中,提供了新的選項 --data-urlencode,通過該選項提供的參數會自動轉義特殊字元。

1 curl --data-urlencode "value 1" http://hostname.com      

除了使用GET和POST協定外,還可以通過 -X 選項指定其它協定,如:

1 curl -I -X DELETE https://api.github.cim      

上傳檔案

1 curl --form "[email protected]" http://hostname/resource      

http://curl.haxx.se/docs/httpscripting.html

繼續閱讀