最近用delphi的THTTPClient做webDAV客户端功能。用了PUT方法来上传文件到服务器。
webDAV服务器需要用户名密码验证。于是了用了NetHTTPClient1AuthEvent 事件内触发验证需求时提供用户名和密码。
AUserName := dav_username;
APassword := dav_password;
运行后看起来一切正常。能上传能下载。刚开始用坚果云配合调试,上传速度较快没看出什么。后来再调试123网盘的webDAV功能时,上传速度没有坚果云快。于是想加个上传进度百分比显示。
加了百分比以后看到上传时很明显的跑了两次进度。刚开始以为哪里代码里重复调用了。排查一番发现代码正常。
于是跟踪调试,看到THTTPClient内部THTTPClient.ExecuteHTTP过程上传完成后传回了401错误,401触发后执行 State.Status := InternalState.ProxyAuthRequired;语句后重新再次上传。
于是把用户认证从AuthEvent 事件内移到html的head段。
NetHTTPRequest1.CustomHeaders['Authorization']:= 'Basic ' +EncodeString(dav_username+':'+dav_password);
再次PUT提交文件,上传一次即成功。