Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> IdWebDav + webdav.yandex.ru 
:(
    Опции темы
Akella
  Дата 25.11.2014, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



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
        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';
        IdWebDAV1.Request.CustomHeaders.Add('Authorization: OAuth c953c33d6ec14895aa126f55145e73b5');
        IdWebDAV1.Put('https://webdav.yandex.ru/', s, r);
        Memo1.Lines.Text := r.DataString;
      finally
        s.Free;
        r.Free;
      end;
    end;


Получаю ошибку: HTTP/1.1 401 Unauthorized. Что я делаю не так? Что я ещё забыл?

Документации и примеров по TIdWebDav не нашёл нигде. 
PM MAIL   Вверх
Illusion Dolphin
Дата 25.11.2014, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 2
Всего: 63



Судя по https://tech.yandex.ru/disk/doc/dg/referenc...ublish-docpage/ я могу посоветовать:
1) 
Код

        IdWebDAV1.URL.Password := '***';
        IdWebDAV1.URL.Username := '*******@yandex.ru';

Это надо убрать, т.к. авторизация идёт по OAuth.
2) Формирование URL и метод вроде бы неправильные, надо (из примера):
Код

PROPPATCH /tst/readme.txt HTTP/1.1

А судя по коду должно получиться (без учёта логина пароля, которые лишние вроде бы):
Код

POST /tst/readme.txt
 
на адрес PROPFIND://webdav.yandex.ru:80 а не https://webdav.yandex.ru
P.S. с webdav никогда не работал, знаю только HTTP

Добавлено через 2 минуты и 26 секунд
Да, и такое хорошо тестится через Fiddler - можно увидеть полный запрос 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
Akella
Дата 26.11.2014, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 4
Всего: 329



Да, уже про OAuth догадался.

Не могу понять, как мне метод правильно указать.
У меня получается, судя по логу

Sent 26.11.2014 12:38:12: POST / HTTP/1.0<EOL>Content-Length: 114<EOL>Authorization: OAuth 6e1ec

код


Код

procedure TForm2.Button1Click(Sender: TObject);
Var
 s, r: TStringStream;
 u: UTF8String;
begin

u := '<D:propfind xmlns:D="DAV:">' + sLineBreak +
  '<D:prop>' + sLineBreak +
    '<D:quota-available-bytes/>' + sLineBreak +
    '<D:quota-used-bytes/>' + sLineBreak +
  '</D:prop>' + sLineBreak +
'</D:propfind>';

  s := TStringStream.Create(u);

  s.Seek(0, 0);

  r := TStringStream.Create('');
  try
    IdWebDAV1.Request.Clear;
    IdWebDAV1.Request.Method := 'PROPFIND';
    IdWebDAV1.Request.Host := '';
    IdWebDAV1.Request.Source := s;
//    IdWebDAV1.Request.ContentType := 'application/x-www-form-urlencoded';
    IdWebDAV1.Request.Accept := '*/*';
    IdWebDAV1.Request.CustomHeaders.Add('Authorization: OAuth ..............................');
    IdWebDAV1.Request.CustomHeaders.Add('Depth: 0');
    IdWebDAV1.URL.URI := '/';
    IdWebDAV1.URL.Host := 'webdav.yandex.ru';
    IdLogFile1.Active := True;

    IdWebDAV1.Post('https://webdav.yandex.ru', s, r);



Добавлено через 11 минут и 46 секунд
нашёл 
DAVPropPatch, DAVPropFind
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0799 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.