curl 使用舉例詳解(四)
十八、FTP的路徑和檔名
需要強調的當從一個以ftp://
開頭的URL地址下獲取檔案的時候,給定的路徑是與你進入的目錄有相關的。如,從你的ftp站點的家目錄中獲取README
,你需要執行:
curl ftp://user:passwd@my.site.com/README
但如果你想要從同一個站點的根目錄中獲取README
檔案的話,你就需要指定檔案的絕對路徑了:
curl ftp://user:[email protected]m//README
在檔名之前多了一個額外的/
十九、SFTP和SCP的路徑和檔名
對於sftp:
和scp:
的URL來說,給定的路徑和檔名都表示為在伺服器上的絕對路徑和檔名。對一個檔案的訪問與遠端使用者的家目錄相關,在檔名上需要加上字首/~/
curl -u $USER sftp://home.example.com/~/.bashrc
二十、FTP和防火牆
FTP協議要求在資料傳輸開始的同時再開放一條額外的連線給客戶端。有二種方式可以完成這一操作
curl
預設的方式是使用PASV
命令讓伺服器再開放另一個埠等待已經連線的客戶端來主動連線這一埠。對於客戶端位於防火牆之後 ,而該防火牆不允許ftp通過防火牆主動連線客戶端的情況,是非常好的解決方法。
curl ftp.download.com
對於如果ftp伺服器也位於防火牆之後,該防火牆也不允許客戶端主動連線除21
埠之外的其他埠情況,又或者伺服器根本就不支援PASV
PORT
命令,並通知伺服器使用通過引數指定給PORT
命令的IP和埠來主動連線客戶端。
curl
的-P
引數支援一些不同的選擇。你的主機可能擁有多個IP地址或者多塊網絡卡, curl
允許你從它們當中進行選擇。
使用預設的IP地址進行連線:
curl -P - ftp.download.com
使用le0
網絡卡的IP地址,通過埠進行下載(windows不適用):
curl -P le0 ftp.download.com
使用IP地址:192.168.0.10 通過商品進行下載:
curl -P 192.168.0.10 ftp.download.com
二十一、網路介面卡
使用指定的網絡卡,從伺服器上獲取一個web頁面:
curl --interface eth0:1 http://www.netscape.com/
或者:
curl --interface 192.168.1.10 http://www.netscape.com/
二十二、HTTPS
使用安全的HTTP要求在編譯curl
之前完成SSL
庫的安裝。如果按此操作,curl
就具備了使用HTTPS
協議進行獲取和提交文件的能力了。
例如:
curl https://www.secure-site.com
curl
還可以在要求使用證書認證的網站上使用你個人的證書來完成獲取/提交的操作。唯一的缺點是證書需要用符合PEM
格式(PEM-format)。PEM是用來儲存證書的標準和開放的格式,但它不被大部分主流瀏覽器所使用(Netscape和MSIE使用的是被稱為PKCS#12
的格式)。如果你想讓curl
使用你最常用的瀏覽器所使用的證書,你需先下載和編譯一個針對你瀏覽器證書格式的轉換器,然後將你的瀏覽器證書轉換成PEM
格式。該轉換器包含在最新版本的OpenSSL軟體包中,對於之前版本的OpenSSL軟體包Stephen
N. Henson博士已經編寫了一個針對SSLeay的補丁來增加該功能。你可以從下面的網址獲得該補丁,前提是要求先安裝SSLeay:
http://www.drh-consultancy.demon.co.uk/
下面舉例說明如何使用帶有密碼的個人證書來自動獲取一份文件:
curl -E /path/to/cert.pem:password https://secure.site.com/
如果你忘記在命令列中指定證書的密碼,程式將會在獲取任何資料之前,提示你輸入密碼。
許多老版本的SSL伺服器在使用新版本OpenSSL所使用的SSLv3
或者TLS
時會出現問題,因此有時為curl
指定所需要使用的SSL版本是非常有用的方法。使用-3
, -2
或者-1
(分別代表 SSLv3
,SSLv2
或者SSLv1
)來精確指定curl
所使用的SSL版本:
curl -2 https://secure.site.com/
除此之外,curl
也會首先嚐試使用v3
,然後再使用v2
。
使用OpenSSL來將你常用的瀏覽器證書轉換成curl
可以使用的PEN格式的證書,你需要如下操作:
- 在Netscape中,你單擊“安全”選單按鈕;
- 選擇“證書 -> 你的證書”,然後在列表中選擇一份證書;
- 單擊“匯出”按鈕;
- 輸入你的證書的PIN
碼;
- 為你的證書選擇一個儲存位置;
- 執行openssl
程式進行證書轉換。如果已經切換到openssl的安裝目錄,你可以執行如下命令:
# ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]
對於Firefox進行如下操作:選擇“選項”,然後“高階”,然後選擇“加密”標籤,檢視證書。這時會開啟證書管理器,你在其中可以進行證書的匯出操作。但是要確保選擇PEM做為證書的匯出型別。
對於MSIE進行如下操作:選擇“Internet選項“,然後選擇”內容“標籤,然後選擇”證書“。接下來,你就以可以轉換為PEM格式的證書型別的將證書進行匯出操作。
對於Chrome進行如下操作:選擇”設定“,然後選擇”顯示高階設定“。在HTTPS/SSL下選擇證書管理。
二十三、檔案續傳
對於檔案的斷點續傳,curl
支援HTTP(S)下載續傳和FTP上傳/下載續傳。
下載續傳一份檔案:
curl -C - -o file ftp://ftp.server.com/path/file
上傳續傳一份檔案(此功能要求FTP伺服器支援非標準命令:SIZE
。如果不支援,curl會進行告知。)
curl -C - -T file ftp://ftp.server.com/path/file
從web伺服器下載續傳一份檔案(此功能要求web伺服器最少支援HTTP/1.1.如果不支援,curl會進行告知。)
curl -C - -o file http://www.server.com/
二十四、時間條件
HTTP允許客戶端根據文件的要求指定一個時間條件。這個條件就是“如果-被修改-自從”或者“如果-未被修改-自從”。curl
允許你通過引數-z
或者--time-cond
來指定條件。
例如你可以很張輕鬆的完成諸如如果伺服器上的檔案的修改日期比本地檔案複本的新就進行下載這樣的操作,具體方法如下:
curl -z local.html http://remote.server.com/remote.html
或者,你也可以反過來,在本地檔案的修改日期比伺服器上的檔案新時,才下載。要實現這個操作,只需要在日期字串的前面加上一個-
即可:
curl -z -local.html http://remote.server.com/remote.html
你也可以指定一個任意的日期文字做為條件。告訴curl
只從伺服器上下載在2012-1-12之後(包含該日期)更新的檔案:
curl -z "Jan 12 2012" http://remote.server.com/remote.html
curl
也可以接受一個日期範圍。你也可以使用加入-
的方法來進行日期條件的設定。