[WebDav] WebDav基础知识

文章目录

什么是WebDav

What is WebDAV
Briefly: WebDAV stands for “Web-based Distributed Authoring and Versioning”. It is a set of extensions to the HTTP protocol which allows users to collaboratively edit and manage files on remote web servers.
WebDAV Resources

WebDav是基于HTTP的协议,他可以允许客户端远程编辑Web内容。

WebDAV的特性和优势
支持创建、修改、复制、移动、移除、查询、列举文件
文件锁
版本控制
支持修改文件属性
安全完善的身份验证机制
支持https加密
支持proxy
客户端缓存
方便的客户端工具:和局域网中的文件共享一样简单使用。
来源:学习WebDav

WebDav常用命令

WebDav在HTTP的基础上扩展了自己的命令,例如:
PROPFIND 用于获取文件夹列表、文件夹内的文件列表、文件夹和文件的属性;
MKCOL 用于创建空文件夹;
PUT 用于上传文件;
GET 用于下载文件;
COPY 用于复制文件;
MOVE 用于移动文件;

WebDav常用命令的测试(代码)

我在坚果云网盘中,创建了几个文件夹,上传了几个文件。并按照如何在Zotero中设置webdav连接到坚果云?进行了网盘的WebDav服务配置,生成了WebDav密码。
在这里插入图片描述
根据学习WebDav ,直接在windows cmd使用curl命令就可以一定程度测试WebDav,我这里是在VS 2022中,通过libcurl库,向坚果云发送请求。
关于VS中如何导入libcurl库,可以看[libcurl] windows visual studio 导入libcurl库

PROPFIND 方法测试

代码:

#include <curl/curl.h>
#include <iostream>
#include <fstream>

using std::cout;
using std::endl;
using std::ios;

#define ERROR(X) (cout << __FUNCDNAME__ <<  " " << (X) << " " << "error" << endl, -1)
#define ERROR2(X,Y) (cout << __FUNCDNAME__ <<  " " << (X) << " " << (Y) << " " << "error" << endl, -1)

#if 1 // WebDav
size_t write_callback(char* ptr, size_t size, size_t nmemb, void* userdata);
int My_PROPFIND();
FILE* fp;

int main()
{
	//打开一个文件,用于输出WebDav响应
	char filename[256];
	sprintf_s(filename, 256, "%s.%s", "WebDav-Test", "xml");
	errno_t err = fopen_s(&fp, filename, "wb");
	if (err)
		return ERROR2("fopen_s", err);

	//初始化curl
	curl_global_init(CURL_GLOBAL_WIN32);

	//WebDav请求函数
	My_PROPFIND();

	curl_global_cleanup();
	cout << "program end." << endl;
}

int My_PROPFIND()
{
	const char* host = "https://dav.jianguoyun.com";
	const char* url = "https://dav.jianguoyun.com/dav/box1";
	
	CURL* curl = curl_easy_init();
	if (curl) {
		//设置HTTP头		
		curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PROPFIND"); //修改HTTP方法
		curl_easy_setopt(curl, CURLOPT_URL, url); //设置URL		
		curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, (long)CURL_HTTP_VERSION_1_1); //指定HTTP版本
		curl_easy_setopt(curl, CURLOPT_USERNAME, "这里隐藏掉邮箱地址@qq.com"); //设置访问WebDav账号和密码
		curl_easy_setopt(curl, CURLOPT_PASSWORD, "axs5pyhc2j6n7q");
		struct curl_slist* list = NULL; //设置HTTP头部字段
		list = curl_slist_append(list, "Connection: close"); //不要长连接
		list = curl_slist_append(list, "Accept: */*");
		curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
		

		//指定用于SSL证书验证的证书
		CURLcode err = curl_easy_setopt(curl, CURLOPT_CAINFO, "D:\SourceCode\cert\_.jianguoyun.com.crt");
		if (err != CURLE_OK) {
			cout << "CURLOPT_CAPATH err:" << err << endl;
		}
		//如果不设置,会出现:unable to get local issuer certificate的错误

		//设定HTTP响应的处理方法
		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
		curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void*)fp);
		//设定控制台回显调试信息
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值