Всем Привет!
Не программировал примерно лет 10, но появилась необходимость написать программу на Delphi XE 10 Tokyo, которая должна заливать определенные файлы в Yandex Disk и начал использовать стандартные компоненты Indy, а именно TIdWebDAV. Вот исходный код:
Код:
procedure TForm2.Button1Click(Sender: TObject);
function GetSha256(sStream: TStream): String;
begin
IdSSLOpenSSL.LoadOpenSSLLibrary;
with TIdHashSHA256.Create do
try
Result := HashStreamAsHex(sStream);
finally
Free;
end;
IdSSLOpenSSL.UnLoadOpenSSLLibrary;
end;
var
fStream: TStream;
asa: string;
begin
fStream := TStream.Create;
if OpenDialog1.Execute then
begin
fStream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
IdWebDAV1.Request.Clear;
IdWebDAV1.Request.CharSet := 'utf-8';
IdWebDAV1.Request.BasicAuthentication := False;
IdWebDAV1.Request.CustomHeaders.Add('PUT /123.html HTTP/1.1');
IdWebDAV1.Request.CustomHeaders.Add('Host: webdav.yandex.ru');
IdWebDAV1.Request.CustomHeaders.Add('Accept: */*');
IdWebDAV1.Request.CustomHeaders.Add('Authorization: OAuth *********************');
IdWebDAV1.Request.CustomHeaders.Add('ETag: ' + MD5DigestToStr(MD5Stream(fStream)));
IdWebDAV1.Request.CustomHeaders.Add('Sha256: ' + GetSha256(fStream));
IdWebDAV1.Request.CustomHeaders.Add('Expect: 100-continue');
IdWebDAV1.Request.CustomHeaders.Add('Content-Type: application/binary');
IdWebDAV1.Request.CustomHeaders.Add('Content-Length: ' + IntToStr(fStream.Size));
Application.ProcessMessages;
IdWebDAV1.DAVPut('https://webdav.yandex.ru', fStream, '');
Application.ProcessMessages;
Memo1.Text := IdWebDAV1.Request.CustomHeaders.Text;
IdWebDAV1.Request.Source.Size.ToString;
fStream.Free;
end;
end;
Но, при выходит окно с ошибкой: Error HTTP/1.1 400 Illegal character 0x20.
Прошу Вас помочь по решению данного вопроса!