Форум по программированию Delphi Sources

 



Вернуться   Форум по программированию Delphi Sources > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.04.2018, 09:22
dviper dviper вне форума
Прохожий
 
Регистрация: 16.11.2012
Сообщения: 8
Репутация: 10
По умолчанию Delphi + TIdWebDAV + Yandex + DAVPut

Всем Привет!
Не программировал примерно лет 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.

Прошу Вас помочь по решению данного вопроса!
Ответить с цитированием
  #2  
Старый 20.04.2018, 09:35
dviper dviper вне форума
Прохожий
 
Регистрация: 16.11.2012
Сообщения: 8
Репутация: 10
По умолчанию ЗАРАБОТАЛО!!!

РЕШЕНИЕ
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
  fStream: TStream;
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('Accept: */*');
    IdWebDAV1.Request.CustomHeaders.Add('Authorization: OAuth *******************');
    IdWebDAV1.Request.CustomHeaders.Add('Expect: 100-continue');
    IdWebDAV1.Request.CustomHeaders.Add('Content-Type: application/binary');

    IdWebDAV1.DAVPut('https://webdav.yandex.ru/123.rar' , fStream, '');
    Application.ProcessMessages;


    fStream.Free;
  end;
end;

Последний раз редактировалось dviper, 20.04.2018 в 09:48.
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:51.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources", 2004-2018

ВКонтакте   Facebook   Twitter