Перейти к содержанию
  • Регистрация
  • 0
Ufomaster

DropBox Rest

Вопрос

У кого есть рабочий пример получения бинарного файла из дроб бокса ?  REST;  Текстовый принимает, а бинарный нет. Помогите. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендуемые сообщения

  • 0

как убрать перекодировку в  header "Authorization": "Bearer%20******************************

? что бы пробел оставался пробелом 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
33 минуты назад, Ufomaster сказал:

как убрать перекодировку в  header "Authorization": "Bearer%20******************************

? что бы пробел оставался пробелом 

%20 это и есть пробел, веб серверы его примут правильно.

Но если это мешает, то можно через Replace заменить %20 на пробел

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
10 минут назад, ZuBy сказал:

%20 это и есть пробел, веб серверы его примут правильно.

Но если это мешает, то можно через Replace заменить %20 на пробел

Передаю

 RESTRequest1.Params.AddHeader('Authorization', 'Bearer Zjjt*******************************');

 RESTRequest1.Execute;

Как сделать что бы пробел остался пробелом ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
3 минуты назад, Ufomaster сказал:

Передаю

 RESTRequest1.Params.AddHeader('Authorization', 'Bearer Zjjt*******************************');

 RESTRequest1.Execute;

Как сделать что бы пробел остался пробелом ?

ну не положено отправлять на сервер пробел, для этого все параметры проходят через UrlEncode

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
39 минут назад, ZuBy сказал:

ну не положено отправлять на сервер пробел, для этого все параметры проходят через UrlEncode

что это за ошибка помогите ? 

First chance exception at $753436EA. Exception class EEncodingError with message 'No mapping for the Unicode character exists in the target multi-byte code page'. Process Project1.exe (5996)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

приходит кодировка которую не ждут

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
2 часа назад, ZuBy сказал:

приходит кодировка которую не ждут

А какую нужно ? для дроп бокса

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Всем спасибо. Глюк в берлине без апдейта. В сиетле все работает отлично.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 29.11.2016 в 23:46, Ufomaster сказал:

Глюк в берлине без апдейта. В сиетле все работает отлично.

Это не решение вопроса...

Поделитесь кодом, пожалуйста, возможно проблему удастся решить другим способом. Помимо смены версии IDE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0
В 01.12.2016 в 17:03, kami сказал:

Это не решение вопроса...

Поделитесь кодом, пожалуйста, возможно проблему удастся решить другим способом. Помимо смены версии IDE.

procedure TForm1.Button1Click(Sender: TObject);
var
  SomeStream : TMemoryStream;

begin

  RESTRequest1.Method:=TRESTRequestMethod.rmGET;
  RESTClient1.BaseURL:='https://content.dropboxapi.com/2/files/download';

  with RESTRequest1.Params.AddItem do begin
    name := 'Authorization';
    Value := 'Bearer Z*************************'; // настоящий токен
    ContentType := ctNone;
    Kind := pkHTTPHEADER;
    Options := [poDoNotEncode];
  end;

   with RESTRequest1.Params.AddItem do begin
    name := 'Dropbox-API-Arg';
    Value := '{"path": "/имя файла на боксе"}';
    ContentType := ctNone;
    Kind := pkHTTPHEADER;
    Options := [poDoNotEncode];
  end;

  RESTRequest1.Execute; 

  SomeStream := tmemorystream.Create;
              try
                Somestream.WriteData(RESTResponse1.RawBytes,Length(RESTResponse1.RawBytes));
                SomeStream.SaveToFile('dowloaded.file');
              finally
                SomeStream.free;
              end;


end;
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 1

на например можно вот так

2016-12-06_21-00-39.png

DropBox_test.rar

UPDATE: Там не используется TRest** компоненты, я их не люблю. Поэтому написал по своему.

В мемо показана картинка, другого ничего не было на дропбоксе, думаю разберетесь в коде

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Сергей Сергеев
      Добрый всем день!
      Уважаемые коллеги, столкнулись с такой проблемой.
      Если есть DataSnap сервер, работающий в режиме Session, и клиент, написанный на Delphi с использованием TSqlConnection к серверу по протоколу DataSnap.
      то все работает. Т.е. клиент открывает соединение,   вызывает методы сервера , при этом на сервере, в экземпляре класса ServerMethod ( живущий от Коннекта, до его закрытия) - хранятся все данные сессии, ИД клиента, его настройки и т.д., и закрыват соединение, при этом сервер уничтожает  экземпляр класса ServerMethod, со всеми данными.
      Встал вопрос, как использовать этот же сервер, с другими клиентами, работающими по REST, например PHP, JS.
      У DS сервера есть rest протокол, НО! после любого обращения по REST, сервер создает и уничтожает сразу класс ServerMethod ( т.е. работает в режиме LifiCicle = Invocation, о чем честно написано в документации)
      Т.е. хранить данные подключения не получится.
      Чтобы не переписывать сервер, решили попытаться прикинуться клиентом DS. Поставили между сервером DS и клиентом DS снифер. Выяснилось, что они общаются между собой по интерфейсу tunel.
      т.е. вместо http://docwiki.embarcadero.com/RADStudio/Rio/en/DataSnap_REST_Messaging_Protocol
      надо обращаться на http://host:port/datasnap/tunnel/[ClassName]/[MethodName]/[ParamValue]
      вообщем там целая жизнь из команд PUT, GET..  
      Описания этого протока не нашел..
      Может кто уже имел такой опыт по сопряжению REST клиента и DS сервера в режиме LifeCicle = Session.
      В приложенном файле протоколе обмена 
      - открытие соединения c с клиента , без авторизации  ( TSqConnect )
      - выполнение метода LoginByKartVDevOsDOC с параметрами - внутренний логин в систему,
      пс. а почему txt нельзя прикрепить?? пришлось зарарить.. 
       
       
      protokol DataSnap.rar
    • От Rionn
      В этой ссылке показан пример работы в одной сети (написано курсивом). Не могу найти, чтобы PC работал по сети или по WiFi, а телефон по мобильным данным. Не подскажете?
    • От notricky
      Возникает вышеозначенная ошибка при попытке декодировать приходящий от сервера текст.
      Я пробовал в различных вариантах.
      http://www.fmxexpress.com/secure-your-rest-client-with-ssl-and-gzip-compression-in-delphi-xe8-firemonkey-on-android-and-ios/
      http://www.fmxexpress.com/decode-gzip-content-from-the-rest-client-in-delphi-xe7-firemonkey-on-android-and-ios/  
       
      Я получаю либо  ошибку из названия темы, либо  Error on call to ZLib library function inflateInit2_

      В общем не работает только на iOS (iPhone).
      На Android, Windows, MacOS работает корректно декомпрессия в автоматическом режиме, потому вопроса о строках не возникает.
    • От notricky
      Собственно есть способ получать и распаковывать данные, полученные в GZIP.
      В качестве примера:
      procedure TFMain.FormCreate(Sender: TObject); begin (ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP).Compressor := TIdCompressorZLib.Create(ReqGet.Client.HTTPClient.Peer.GetObject as TIdCustomHTTP); ReqGet.AcceptEncoding := 'gzip,deflate'; ... end; А вот как их отправить (как запаковать - механизм? и куда подставить строку) - не понятно.
      Отправка интересует и POST и GET
      Прошу помощи.
    • От Равиль Зарипов (ZuBy)
      Доброго времени суток!
      Навеяно этой темой.
      Посмотрел реализацию от @Pax Beach (за что ему спасибо большое) и столкнулся с тем что TRESTClient со всеми потрахами это просто дикий ужас.
      Решил собрать аналогичный пример, только не использовать TREST***
      немного опишу, свою реализацию
      uAppSettings.pas - хранит описание вашего приложения созданного в ВК  FMX.RESTLight.pas - модуль "общения" клиента с сервером FMX.RESTLight.Types.pas - тут хранятся типы для работы TRESTLight Приведу код, который постит Вам на стену текст
      var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 5); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('friends_only', '0', false); aFields[4] := TmyRestParam.Create('message', 'Тестовое сообщение <RESTLight>', false); TTask.Run( procedure begin aJSON := TRESTLight.Execute('wall.post', FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- wall.post ----'); Memo1.Lines.Add(aJSON); end); end); а вот так можно заливать файлы
      var aFields: TArray<TmyRestParam>; aJSON: string; begin SetLength(aFields, 4); aFields[0] := TmyRestParam.Create('access_token', FAuthToken.token, false); aFields[1] := TmyRestParam.Create('v', FVKApp.APIVersion, false); aFields[2] := TmyRestParam.Create('owner_id', FAuthToken.user_id, false); aFields[3] := TmyRestParam.Create('photo', aUploadFile, true); // для файлов указывается !!!true!!! TTask.Run( procedure begin // для загрузки файлов использовать TRESTLight.Execute2, в нем можно указать произвольный URL aJSON := TRESTLight.Execute2(aUploadURL, FVKApp, aFields); TThread.Synchronize(TThread.CurrentThread, procedure begin Memo1.Lines.Add('---- upload file to server ----'); Memo1.Lines.Add(aJSON); end); end); P.S. На правильность и оригинальность не претендую, просто альтернативный вариант. Мне например не понравилась как устроен TRESTClient, много компонентов лишних. В боевых условиях наверное код еще будет модернизироваться, я рассмотрел только пару методов, но думаю общая концепция не сильно поменяется
      GitHub   TRESTLight.zip
    • От SergeyIT
      Что то нелепое. Помогите, плиз, разобраться.
      Ничего не кроме формы.
      Любой вызов
      client:= TRESTClient.Create('http://www.google.com'); с любым адресом приводит к появлению

    • От Syb
      Я могу совсем что то не правильно делать, хочу получить данные согласно API :
       
       
      http://glonasssoft.ru/wiki/?wiki_name=API
      var jValue:TJSONValue; s,s1:string; begin RestClient1.BaseURL:='http://dev.glonasssoft.ru/auth/login'; Restrequest1.Execute; jValue:=RESTResponse1.JSONValue; s:=jValue.ToString; s1:= copy(s,pos('AuthID:"',s)+11,pos('","U',s)-pos('AuthID:"',s)-11);//достал ключ RestClient2.BaseURL:='http://dev.glonasssoft.ru/vehicles_'; Restrequest2.Params[0].Value:=s1; -здесь параметр типа HttpHeader задан X-Auth в него сую ключ Restrequest2.Execute; - говорит не авторезирован jValue:=RESTResponse2.JSONValue; s:=jValue.ToString; что я не так делаю?
    • От Dozent
      Добрый день!
      Прошу помощи.
      Работая с VCL для набора данных использую TDataSet, какой аналог есть в FMX.
       
      Поясню подробнее:
       
      У меня есть сервер на PHP обращаясь к которому я получаю ответ в JSON
      {"field_names":["ID","VNAME","VPASSWORD","RROLE","VDESCRIPTION","VNAMEE","USERROLE"],"data":[[1,"\u0418\u0432\u0430\u043d\u043e\u0432 \u0418.\u0418.","123",1,"\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c \u0443\u0447\u0435\u0431\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u044f.","\u0418\u0432\u0430\u043d\u043e\u0432 \u0418.\u0418.","\u041f\u0440\u0435\u043f\u043e\u0434\u0430\u0432\u0430\u0442\u0435\u043b\u044c"]]} Это только по первому пользователю. Их как понимаете мб больше! Хочу результат ответа PHP скрипта засунуть в структуру! В VCL  эту роль хорошо выполняет TDataSet, какой аналог в FMX?
       
       
    • От estra
      Мне необходимо произвести некоторые действия в случае возникновения исключения Time Out в RESTRequest. Но событие OnHTTPProtocolError не возникает при исключениях, не связанных с HTTP:
       
      This event will not get fired if a non HTTP-related exception occurs during execution. This includes, but is not limited to timeout and server not found related exceptions.   Как выйти из ситуации и обработать Time Out? Наверное может помочь try except, но какого класса исключение нужно ловить, пока не нашел.
    • От Labian
      Всем привет!
      Возникла трудность при разработке приложения для iOS. Необходимо получить информацию о пользователе в VK методом "users.get"
       
      Использую REST для авторизации и запросов.
      При попытке выполнить запрос к https://api.vk.com/method/ возникает ошибка :
        First chance exception at $000178C8. Exception class EIdOSSLCouldNotLoadSSLLibrary with message 'Could not load SSL library.'
       
      Что нужно сделать чтоб работать с https на iOS?
       
      Delphi XE7 Update 1
       
       
       
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...