|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
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
|
|||
|
|||
ЗАРАБОТАЛО!!!
РЕШЕНИЕ
Код:
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. |