Delphi TIdWebDav Yandex
使用Delphi2007, 使用InDy 10, 使用TIdWebDAV, 服务webdav.yandex.ru, 我想发布一个文件,但我得到了一个错误授权Delphi TIdWebDav Yandex,delphi,indy,webdav,Delphi,Indy,Webdav,使用Delphi2007, 使用InDy 10, 使用TIdWebDAV, 服务webdav.yandex.ru, 我想发布一个文件,但我得到了一个错误授权 procedure TForm2.Button1Click(Sender: TObject); Var s, r: TStringStream; begin s := TStringStream.Create('<propertyupdate xmlns="DAV:">' + sLineBreak + '<set
procedure TForm2.Button1Click(Sender: TObject);
Var
s, r: TStringStream;
begin
s := TStringStream.Create('<propertyupdate xmlns="DAV:">' + sLineBreak +
'<set>' + sLineBreak +
'<prop>' + sLineBreak +
'<public_url xmlns="urn:yandex:disk:meta">true</public_url>' + sLineBreak +
'</prop>' + sLineBreak +
'</set>' + sLineBreak +
'</propertyupdate>');
r := TStringStream.Create('');
try
//fill params
IdWebDAV1.URL.Password := '*****';
IdWebDAV1.URL.Username := '***@yandex.ru';
IdWebDAV1.URL.Port := '80';
IdWebDAV1.URL.URI := '/tst/readme.txt';
IdWebDAV1.URL.Host := 'webdav.yandex.ru';
IdWebDAV1.URL.Protocol := 'PROPFIND';
//fill OAuth ID
IdWebDAV1.Request.CustomHeaders.Add('Authorization: OAuth c953e33d6ec14895aa776f55145e73b5');
IdWebDAV1.Put('https://webdav.yandex.ru/', s, r);
//result
Memo1.Lines.Text := r.DataString;
finally
s.Free;
r.Free;
end;
end;
procedure TForm2.按钮1单击(发送方:TObject);
变量
s、 r:TStringStream;
开始
s:=TStringStream.Create(“”+sLineBreak+
''+sLineBreak+
''+sLineBreak+
“真的”+sLineBreak+
''+sLineBreak+
''+sLineBreak+
'');
r:=TStringStream.Create(“”);
尝试
//填充参数
IdWebDAV1.URL.Password:='*****';
IdWebDAV1.URL.Username:='***@yandex.ru';
IdWebDAV1.URL.Port:=“80”;
IdWebDAV1.URL.URI:='/tst/readme.txt';
IdWebDAV1.URL.Host:=“webdav.yandex.ru”;
IdWebDAV1.URL.Protocol:=“PROPFIND”;
//填写OAuth ID
IdWebDAV1.Request.CustomHeaders.Add('Authorization:OAuth c953e33d6ec14895aa776f55145e73b5');
IdWebDAV1.Put('https://webdav.yandex.ru/",s,r),;
//结果
Memo1.Lines.Text:=r.DataString;
最后
s、 免费的;
r、 免费的;
结束;
结束;
我收到一个错误:HTTP/1.1 401未经授权。您没有正确使用
TIdWebDAV
。发布propertyupdate
XML时,应该使用其DAVPropPatch()
方法,而不是其Put()
方法,并且根本不应该手动填充URI
属性
请尝试以下方法:
procedure TForm2.Button1Click(Sender: TObject);
var
q: TStringStream;
r: TMemoryStream;
begin
q := TStringStream.Create(
'<propertyupdate xmlns="DAV:">' + sLineBreak +
'<set>' + sLineBreak +
'<prop>' + sLineBreak +
'<public_url xmlns="urn:yandex:disk:meta">true</public_url>' + sLineBreak +
'</prop>' + sLineBreak +
'</set>' + sLineBreak +
'</propertyupdate>'
);
try
r := TMemoryStream.Create;
try
IdWebDAV1.Request.Username := '***@yandex.ru';
IdWebDAV1.Request.Password := '*****';
IdWebDAV1.Request.ContentType := 'text/xml';
IdWebDAV1.Request.Charset := 'utf-8';
IdWebDAV1.Request.CustomHeaders.Values['Authorization'] := 'OAuth c953e33d6ec14895aa776f55145e73b5';
IdWebDAV1.Request.BasicAuthentication := False;
IdWebDAV1.DAVPropPatch('https://webdav.yandex.ru/tst/readme.txt', q, r);
r.Position := 0;
Memo1.Lines.Text := ReadStringAsCharset(r, IdWebDAV1.Response.Charset);
finally
r.Free;
end;
finally
q.Free;
end;
end;
procedure TForm2.按钮1单击(发送方:TObject);
变量
q:TStringStream;
r:TMemoryStream;
开始
q:=TStringStream.Create(
''+sLineBreak+
''+sLineBreak+
''+sLineBreak+
“真的”+sLineBreak+
''+sLineBreak+
''+sLineBreak+
''
);
尝试
r:=TMemoryStream.Create;
尝试
IdWebDAV1.Request.Username:='***@yandex.ru';
IdWebDAV1.Request.Password:='*****';
IdWebDAV1.Request.ContentType:='text/xml';
IdWebDAV1.Request.Charset:=“utf-8”;
IdWebDAV1.Request.CustomHeaders.Values['Authorization']:=“OAuth c953e33d6ec14895aa776f55145e73b5”;
IdWebDAV1.Request.BasicAuthentication:=False;
IdWebDAV1.DAVPropPatch('https://webdav.yandex.ru/tst/readme.txt,q,r);
r、 位置:=0;
Memo1.Lines.Text:=ReadStringAsCharset(r,IdWebDAV1.Response.Charset);
最后
r、 免费的;
结束;
最后
q、 免费的;
结束;
结束;