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

Помогите с REST разобраться

Вопрос

Я могу совсем что то не правильно делать, хочу получить данные согласно 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;

что я не так делаю?

Изменено пользователем Syb

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


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

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

  • 0

зачем тебе REST компоненты? чем обычный idHTTP не устраивает?

проверить не получится, нет учетки

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


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

зачем тебе REST компоненты? чем обычный idHTTP не устраивает?

проверить не получится, нет учетки

demo учетка там есть l:demo p:demo

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


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

зачем тебе REST компоненты? чем обычный idHTTP не устраивает?

проверить не получится, нет учетки

таже фигня

s:=IdHTTP1.Get('http://dev.glonasssoft.ru/auth/login?username=demo&password=demo');
IdHTTP1.Request.RawHeaders.AddValue(' X-Auth',copy(s,pos('AuthID:"',s)+11,pos('","U',s)-pos('AuthID:"',s)-11));
s:=IdHTTP1.Get('http://dev.glonasssoft.ru/info/profile'); 

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


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

получилось)

ну так выложи решение, вдруг кому пригодится

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


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

 

получилось)

ну так выложи решение, вдруг кому пригодит

 

 

я ошибся в в строке ключ без символа передавал так что любой из вариантов выше рабочий там просто нужно было 12 сдвиг делать , а не 11

Изменено пользователем Syb

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


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

Теперь проблема в парсинге пробую superobject, что то пока не пойму как по объекту ходить... Может есть лучше спопсоб , как перебирать записи ?

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


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

Теперь проблема в парсинге пробую superobject, что то пока не пойму как по объекту ходить... Может есть лучше спопсоб , как перебирать записи ?

есть два варианта, вот тут есть код. может поможет

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


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

 

Теперь проблема в парсинге пробую superobject, что то пока не пойму как по объекту ходить... Может есть лучше спопсоб , как перебирать записи ?

есть два варианта, вот тут есть код. может поможет

 

БОЛЬШОЕ спасибо сразу все встало на места))

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


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

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

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

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

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

  Разрешено использовать не более 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
    • От rareMax
      Как убрать поле класса из сериализации через Rest.Json?
      Вот как я пробую избавиться от поля Foo:
      program Project1; {$APPTYPE CONSOLE} {$R *.res} uses REST.Json, System.JSON.Serializers, System.SysUtils; type TFoo = class private FValue1: Integer; public Value2: Integer; property Value3: Integer read FValue1 write FValue1; end; [JsonSerialize(TJsonMemberSerialization.&Public)] TBar = class private FValue1: Integer; FFoo: TFoo; public Value2: Integer; property Value3: Integer read FValue1 write FValue1; // property Foo: TFoo read FFoo write FFoo; end; procedure Test; var LBar: TBar; begin LBar := TBar.Create; try Writeln(TJson.ObjectToJsonString(LBar)); finally LBar.Free; end; end; begin try { TODO -oUser -cConsole Main : Insert code here } Test; Readln; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. Но на выходе все равно есть поле Foo.
       
    • От Rionn
      В этой ссылке показан пример работы в одной сети (написано курсивом). Не могу найти, чтобы PC работал по сети или по WiFi, а телефон по мобильным данным. Не подскажете?
    • От ENERGY
      Друзья, нашел тут интересную статью, где тестируются разные jSON парсеры.
       
      Ссылка: http://www.webdelphi.ru/2016/10/ishhem-samyj-bystryj-parser-json-v-delphi/
      Автор: Владислав Баженов
      Описание (26/10/2016):
       
    • От unicorn
      Всем привет. 
      Мне нужно отправить запрос к серверу в формате JSON-RPC. Вопрос - как в него запихнуть json-данные правильно?
    • От Ufomaster
      У кого есть рабочий пример получения бинарного файла из дроб бокса ?  REST;  Текстовый принимает, а бинарный нет. Помогите. 
    • От 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
    • От Просто Проги
      Пытаюсь получить список друзей из вк получаю их по api записываю в memo.text ответ от get запроса,после пытаюсь получить из json поля
      ответ выглядит так
      { "response": { "count": 104, "items": [ { "id": 1308603, "first_name": "Виктория", "last_name": "Талина", "photo": "http://cs625517.vk.me/v625517603/4e79b/E9Q1WA5SSLiI.jpg", "photo_100": "http://cs625517.vk.me/v625517603/4e79a/15QwerpQbCKk.jpg", "photo_400_orig": "http://cs625517.vk.me/v625517603/4e7199/wxOJQyZhqq8.jpg", "online": 0 }, { "id": 282070, "first_name": "Никита", "last_name": "Багров", "photo": "http://cs630623.vk.me/v630623070/4b610/RXNNdJ6_Nik.jpg", "photo_100": "http://cs630623.vk.me/v630623070/4b60f/MDXpi0deY1A.jpg", "photo_400_orig": "http://cs630623.vk.me/v630623070/4b60e/ec7A3pBDJZ0.jpg", "online": 0 }, "first_name": "Имя ", Следующим кодом
       
      var JSON: TJSONObject; JSONArray: TJSONArray; i: Integer; begin JSON := TJSONObject.ParseJSONValue(Form2.Memo2.Lines.Text) as TJSONObject; сюда получается я заношу весь код Form2.Memo2.Lines.Clear; JSONArray := TJSONArray(JSON.Get('items').JsonValue); далее изу по массиву итмемов for i := 0 to JSONArray.Size - 1 do begin Form2.Memo2.Lines.Add(TJSONPair(TJSONObject(JSONArray.Get(i)).Get('first_name')).JsonValue.Value); пытаюсь добавить найденное поле end; но летят ошибка критичная (
  • Последние посетители   0 пользователей онлайн

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

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