学习WebDav
- 前言
- 初識WebDav
- 有哪些支持webdav的網盤?
- WebDAV的特性和優勢
- 服務端的搭建
- 調用WebDav接口
- PROPFIND方法
- PROPPATCH方法
- MKCOL方法
- PUT方法
- GET方法
- DELETE方法
- COPY方法
- MOVE方法
- LOCK和UNLOCK方法
- 總結
前言
????在之前一篇文章【keepass+堅果云管理我的密碼】中我使用了堅果云的WebDav服務來讓我的KeePass實現多平臺和設備共享數據庫文件。然后我就想學一學WebDav是什么,有什么用,以及如何使用。在這之前我也用過相關網絡存儲功能的服務,用來保存我定時打包的備份文件,當時考慮用百度網盤這類網盤工具,但是API太難用了,授權啥的也很麻煩,而且還需要創建應用,而我只想簡單的上傳和下載一下我的文件而已。當時的解決方案是使用【gdrive】命令行工具,感覺雖然略微復雜,但仍然比百度網盤簡單(PS:別問我為啥用谷歌產品,因為服務器在墻外)。但這次用堅果云的WebDav讓我看到了更簡單的上傳下載網盤文件的方案,我甚至都不用安裝額外的工具,只使用curl命令行就能實現文件上傳下載到網盤的功能,簡直牛逼plus啊。下面就展示我學習WebDav的記錄吧。
初識WebDav
????放上【WebDAV官網】,上面關于WebDAV的介紹:簡而言之:WebDAV代表“基于Web的分布式創作和版本控制”。它是HTTP協議的一組擴展,允許用戶協作編輯和管理遠程web服務器上的文件。我理解的WebDav其實就是一個http請求而已,只是拿來做的事情是管理服務上的文件。不過呢,通過一些特殊的規則讓服務器對特殊的http請求進行相應的邏輯處理,使得管理服務器文件更方便且功能更豐富。注意:認證這塊確實比較簡陋,用Basic Auth方式認證,比較容易被攻擊。所以我一般都會為文件進行加密,或者用別的方案保證文件傳輸的安全性,比如KeePass使用key文件,即使數據庫文件被人盜用也打不開。
有哪些支持webdav的網盤?
國外網盤:Box、Dropbox、teracloud、yandex、TransIP國內網盤:堅果云、城通網盤私有云:OwnCloud、Seafile 、群暉目前國內最好用的支持webdav:堅果云
當然支持WebDav協議的應用大家可以自行百度額,像我使用的KeePass就可以使用WebDav。好像WPS也支持,不過沒試過。這里是堅果云幫助里面介紹相關應用使用WebDav【點擊跳轉】
WebDAV的特性和優勢
- 支持創建、修改、復制、移動、移除、查詢、列舉文件
- 文件鎖
- 版本控制
- 支持修改文件屬性
- 安全完善的身份驗證機制
- 支持https加密
- 支持proxy
- 客戶端緩存
- 方便的客戶端工具:和局域網中的文件共享一樣簡單使用。
對比ftp協議,身份驗證、加密、支持proxy、客戶端緩存都是webdav的優勢。在http傳輸上,ftp一個文件需要建立一個新連接;而webdav只要一個tcp連接,傳輸更高效。
服務端的搭建
????由于我只想用堅果云的服務,不想自己搭建服務器,所以沒有去了解,不過Nginx官網有個配置WebDav的方式【點擊跳轉】,大家有興趣可以去自己試試看。網上也有很多WebDav的服務器,我還在GitHub上搜索WebDav,能搜到很多服務器的代碼,有興趣可以自己找找看吧。
調用WebDav接口
????官方關于WebDav的介紹【點擊跳轉】,安排的明明白白,雖然我英語比較差,但我翻譯軟件玩的賊溜,還是勉強能看懂的。注意,下面的username為堅果云的賬號,password為堅果云的應用密碼,不是登錄密碼額,詳情看堅果云的幫助文檔吧。
PROPFIND方法
PROPFIND方法檢索在由請求URI標識的資源上定義的屬性,一般這個請求用來查看路徑下的目錄和文件,結果會有這些文件的名稱和屬性等。
curl --user "username:password" --request PROPFIND https://dav.jianguoyun.com/dav/PROPPATCH方法
PROPPATCH方法處理請求正文中指定的指令,以設置和/或刪除在由請求URI標識的資源上定義的屬性。
curl --user "username:password" --request PROPPATCH https://dav.jianguoyun.com/dav/test.txtMKCOL方法
MKCOL方法是創建目錄。
curl --user "username:password" --request MKCOL https://dav.jianguoyun.com/dav/testPUT方法
PUT方法用于上傳文件。
curl --user "username:password" --request PUT https://dav.jianguoyun.com/dav/test/test.sql --data "body" 上面命令執行后,去查看文件內容會變為"body"curl --user "username:password" --request PUT https://dav.jianguoyun.com/dav/test/test.sql --data @C:\body.txt 上面命令執行后,去查看文件內容會變為"C:\body.txt"的文件內容GET方法
GET方法用于下載文件,下面命令就能方便的下載文件。
curl --user "username:password" --request GET https://dav.jianguoyun.com/dav/test/test.sql --output test.sqlDELETE方法
DELETE方法用于刪除文件或文件夾。
curl --user "username:password" --request DELETE https://dav.jianguoyun.com/dav/test/test.sqlCOPY方法
COPY方法用于復制文件,url為源文件,header中的Destination為目標文件地址。
curl --user "username:password" --request COPY https://dav.jianguoyun.com/dav/test/a/test.sql --header "Destination: https://dav.jianguoyun.com/dav/test/b/test.sql" 上面命令會將"/test/a/test.sql"復制到"/test/b/test.sql"里面。MOVE方法
MOVE方法用于移動文件,url為源文件,header中的Destination為目標文件地址。
curl --user "username:password" --request MOVE https://dav.jianguoyun.com/dav/test/a/test.sql --header "Destination: https://dav.jianguoyun.com/dav/test/b/test.sql" 上面命令會將"/test/a/test.sql"移動到"/test/b/test.sql"里面。LOCK和UNLOCK方法
這兩種方法我基本不用,我看文檔里面是需要傳xml的body內容,實現也很簡單,這里就不研究了。
總結
總結
- 上一篇: python协程gevent案例 爬取斗
- 下一篇: 异常记录---Error creatin