WebDAV Client
Package WebDAV Client
provides easy and convenient to work with WebDAV-servers:
- Yandex.Disk
- Dropbox
- Google Drive
- Box
- 4shared
- ownCloud
- ...
Install old version
# via brew or homebrew
$ brew install wdc
Build
Building WebDAV Client from sources:
$ git clone --recursive https://github.com/CloudPolis/webdav-client-cpp
$ cd webdav-client-cpp
$ ./tools/polly/bin/polly --install
Building documentation:
$ doxygen docs/doxygen.conf
$ open docs/html/index.html
Running tests
For run tests you need to set environment variables WEBDAV_HOSTNAME
, WEBDAV_USERNAME
and WEBDAV_PASSWORD
(optional WEBDAV_ROOT
).
$ export WEBDAV_HOSTNAME=<your_webdav_hostname>
$ export WEBDAV_USERNAME=<your_webdav_username>
$ export WEBDAV_PASSWORD=<your_webdav_password>
$ ./tools/polly/bin/polly --test --reconfig --fwd BUILD_TESTS=yes
Usage
#include <webdav/client.hpp>
#include <iostream>
#include <map>
#include <memory>
int main()
{
std::map
options =
{
{
"webdav_hostname",
"https://webdav.yandex.ru"},
{
"webdav_username",
"webdav_username"},
{
"webdav_password",
"webdav_password"}
};
// additional keys:
// - webdav_root
// - cert_path, key_path
// - proxy_hostname, proxy_username, proxy_password
std::unique_ptr
client{
new WebDAV::Client{ options } };
bool check_connection = client->
check();
std::cout <<
"test connection with WebDAV drive is "
<< (check_connection ?
"" :
"not ")
<<
"successful"<< std::endl;
bool is_dir = client->
is_directory(
"/path/to/remote/resource");
std::cout <<
"remote resource is "
<< (is_dir ?
"" :
"not ")
<<
"directory" << std::endl;
client->
create_directory(
"/path/to/remote/directory/");
client->
clean(
"/path/to/remote/directory/");
std::cout <<
"On WebDAV-disk available free space: "
<< client->
free_size()
<< std::endl;
std::cout <<
"remote_directory_name";
for (
const
auto& resource_name : client->
list(
"/path/to/remote/directory/"))
{
std::cout <<
"\t" <<
"-" << resource_name;
}
std::cout << std::endl;
client->
download(
"/path/to/remote/file",
"/path/to/local/file");
client->
clean(
"/path/to/remote/file");
client->
upload(
"/path/to/remote/file",
"/path/to/local/file");
const
auto meta_info = client->
info(
"/path/to/remote/resource");
for (
const
auto& field : meta_info) {
std::cout << field.
first <<
":" <<
"\t" << field.
second;
}
std::cout << std::endl;
client->
copy(
"/path/to/remote/file1",
"/path/to/remote/file2");
client->
move(
"/path/to/remote/file1",
"/path/to/remote/file3");
client->
async_upload(
"/path/to/remote/file",
"/path/to/local/file");
client->
async_download(
"/path/to/remote/file",
"/path/to/local/file");
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.4)
HunterGate(
URL "https://github.com/ruslo/hunter/archive/v0.23.83.tar.gz"
SHA1 "12dec078717539eb7b03e6d2a17797cba9be9ba9"
)
project(example)
hunter_add_package(WDC)
find_package(WDC CONFIG REQUIRED)
add_executable(example example.cpp)
target_link_libraries(example WDC::libwdc)