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