Delphi TIdWebDav Yandex

-4

Используя Delphi 2007, используя InDy 10, используя TIdWebDAV, службу webdav.yandex.ru, я хочу опубликовать файл, но я получаю разрешение на ошибку

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;

Я получаю ОШИБКУ: HTTP/1.1 401 Несанкционирован.

спросил(а) 2014-11-25T10:47:00+03:00 6 лет, 6 месяцев назад
0
63

Вы не используете TIdWebDAV правильно. Вы должны использовать свой DAVPropPatch() вместо метода Put() при отправке XML- DAVPropPatch() propertyupdate, и вы не должны заполнять свойство 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;

ответил(а) 2014-11-25T21:15:00+03:00 6 лет, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема