Curl是一個網絡傳輸工具,同wget非常相似。主要的區別在於wget默認是保存到文件,而curl將輸出定向到命令行上。這使得curl能非常方便的查看站點的內容。比如,我們可以從ifconfig.me站點得到我們本機的IP位址:
curl ifconfig.me
93.96.141.93
Windows下Curl可執行程序的下載地址為:
https://curl.haxx.se/download.html
該下載不需要編譯,可以立即執行,windows 64位下載的時候,注意點版本號那一列(如:7.49.1),不要點「Win64 ia64 zipmetalink」,點這個下載下來的為源碼。
原始碼地址為:
http://curl.haxx.se/download/
一. 如何下載Curl命令行工具?
1. 進入下載頁,選擇需要的版本(適合自身作業系統): https://curl.haxx.se/download.html
2. 根據自己的作業系統位數和是否需要SSL下載相應的版本。我這裡這裡下載curl-7.59.0-win32-mingw.zip,下載完成之後解壓到需要使用curl命令的目錄。這裡為了方便我先直接解壓到當前目錄。
3. 打開命令窗口並定位到curl命令所在的目錄,你可以使用cd命令也可以像下圖這樣快速進入:比如:cd f:\curl\bin
4. 以百度網址推送為例例:
將要提交的連結按照每行一條的格式寫入一個文本文件中,命名此文件為urls.txt,然後進入該文件所在目錄,執行如下命令:
curl -H 'Content-Type:text/plain' --data-binary @urls.txt "http://data.zz.baidu.com/urls?site=m.0460.com&token=hJPA7bOjJmh4jKaC&type=mip"
5. 如何在任意目錄下使用cUrl命令工具
可以給Windows增加curl命令的環境變量,增加CURL_HOME環境變量,給PATH環境變量加上%CURL_HOME%; 變量值為crul工具所在目錄:如我這裡的 f:\curl\bin。
這樣就可以在命令窗口的任意目錄下使用curl命令了。
二. Curl命令行工具常用參數詳解:
下載單個文件,默認將輸出列印到標準輸出中(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上。
從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
傳遞請求數據
默認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¶m2=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 "fileupload=@filename.txt" http://hostname/resource
-H:指定一個請求頭,如:
curl -H "Test: HelloWorld" http://127.0.0.1:8080
使用該命令,在發出的請求中會多一個 HTTP 請求頭:Test: HelloWorld
百度網址推送示例:
將要提交的連結按照每行一條的格式寫入一個文本文件中,命名此文件為urls.txt,然後進入該文件所在目錄,執行如下命令:
curl -H 'Content-Type:text/plain' --data-binary @urls.txt "http://data.zz.baidu.com/urls?site=m.0460.com&token=hJPA7bOjJmh4jKaC&type=mip"
-0:使用 HTTP/1.0 發送請求,如:
curl -O http://127.0.0.1:8080
-L:會對重定向進行處理,與 -o 參數配合使用,功能類似於 wget:
curl -L https://github.com/coreos/etcd/releases/download/v2.2.2/etcd-v2.2.2-linux-amd64.tar.gz -o etcd-v2.2.2-linux-amd64.tar.gz
-k:不安全的 HTTPS,客戶端不用驗證站點的證書,如:
curl -k https://127.0.0.1:8443
對於安全連接,還有以下參數 –ssl,–sslv2 或 -2,–sslv3 或 -3,–tlsv1 或 -l,–tlsv1.0,–tlsv1.1,–tlsv1.2
-I:不顯示消息體,如:
[root@123 ~]# curl -I http://127.0.0.1:8080
HTTP/1.1 200 OK
Server: openresty/1.9.3.1
Date: Tue, 29 Dec 2015 02:07:34 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sun, 29 Nov 2015 15:21:26 GMT
Connection: keep-alive
ETag: "565b17f6-264"
Accept-Ranges: bytes
-d:指定消息體,如:
curl http://127.0.0.1:8080 -d "Hello World"
-X:指定 HTTP 請求方法,如:
-XPOST HTTP 請求為 POST
-XDELETE HTTP 請求為 DELETE
該參數如果不指定,如果請求中不帶消息體,默認使用 GET 方法,否則使用 POST 方法,示例:
curl -XDELETE http://127.0.0.1:8080