Updated 2014-06-07 20:46:23 by dkf

DAVkit is a WebDAV client-side implementation in/for Tcl. The starkit is in sdarchive, and at [1].

It supports reading, writing, listings, and managing directories. DAVkit consists of two new packages, webdav, and davvfs. The webdav package does the real work, using an extended version of http (geturl) which supports DAV's PROPFIND methods, etc. The davvfs package is a VFS driver on top of the webdav package.

DAVKit includes all the packages needed to run. You can unpack it or use it as is with "source davkit.kit; package require davvfs".

TclXML is included to parse DAV's PROPFIND results, which are in XML. Binaries of expat for Windows and Mac OS X are included to greatly speed this up for large directories, but the code will fall back gracefully to TclXML's pure-tcl implementation on other platforms.

For detailed information, see the README [2]. Here are some examples from that file:
    1)        Using calls to webdav::* procs, as in:

                package require webdav
                set dav [webdav::open http://mysite.org/some/path/]
                puts [webdav::get $dav foo/bar]
                webdav::close $dav

    2)        Via an object command wrapper to do the same:

                package require webdav
                set dav [webdav::connect http://mysite.org/some/path/]
                puts [$dav get foo/bar]
                $dav close

    3)  As a mounted VFS file system:

                package require vfs::dav
                vfs::dav::Mount http://mysite.org/some/path/ mydav
                set fd [open mydav/foo/bar]
                puts [read $fd]
                close $fd
                vfs::unmount mydav

    4)  By registering a new url type handler:

                package require vfs::urltype
                vfs::urltype::Mount dav
                set fd [open dav://mysite.org/some/path/foo/bar]
                puts [read $fd]
                close $fd

The API of the webdav package is documented here [3].

The webdav and davvfs packages have been submitted to Tcllib for consideration, review, and possible inclusion.

This project has been made possible through financial support by Primetime.

-jcw