Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Json Post mit Indy ? (https://www.delphipraxis.net/163314-json-post-mit-indy.html)

Blamaster 23. Sep 2011 22:02

Json Post mit Indy ?
 
Hi,

ich möchte mit Indy auf die Api einer website zugreifen. Es werden dabei allerdings keine normalen Post befehle, sondern Json Befehle gesendet.

Wie lässt sich das mit Indy umsetzen ?

Gruß Yannic

geskill 24. Sep 2011 08:14

AW: Json Post mit Indy ?
 
Ich benutze dafür die LkJSON Klasse.

Delphi-Quellcode:
uses
  uLkJSON;


var
  _lkJSONobject: TlkJSONobject;
  _params, _result: TStringStream;
begin
  _lkJSONobject := TlkJSONobject.Create;
  _params := TStringStream.Create('', CP_UTF8);
  _result := TStringStream.Create('', CP_UTF8);
  try
    _lkJSONobject.Add('name', 'value');

    _params.WriteString('data=' + TlkJSON.GenerateText(_lkJSONobject));

    try
      Post('http://...', _params, _result);
    except
    end;

    // _result.DataString auswerten whatever
  finally
    _result.Free;
    _params.Free;
    _lkJSONobject.Free;
  end;

end;

mjustin 24. Sep 2011 08:51

AW: Json Post mit Indy ?
 
Zitat:

Zitat von Blamaster (Beitrag 1126344)
Hi,
ich möchte mit Indy auf die Api einer website zugreifen. Es werden dabei allerdings keine normalen Post befehle, sondern Json Befehle gesendet.

Wie lässt sich das mit Indy umsetzen ?

Dazu muss man wissen, ob die Daten als Formularfelder gesendet werden sollen, oder als Body des POST Requests. 'Normal' wären aber eigentlich beide :)

Für POST mit Formularfeldern ist ein Beispiel hier zu finden (oder mit Indy post form googeln):

http://www.tutorials.de/delphi-kylix...rschicken.html


Ich tippe aber auf die zweite Variante, POST ohne Formularfelder. Das Beispiel von geskill kann man dazu verwenden, wenn man diese Zeile

Delphi-Quellcode:
_params.WriteString('data=' + TlkJSON.GenerateText(_lkJSONobject));

ändert in

Delphi-Quellcode:
_params.WriteString(TlkJSON.GenerateText(_lkJSONobject));

dann steht der reine JSON Code im HTTP Body des POST Requests.

Hope this helps,

Blamaster 24. Sep 2011 09:41

AW: Json Post mit Indy ?
 
Hi,

das hat schonmal geholfen :) Gesucht war der Post mit dem Content im body.

Momentan sehen die erzeugten Requests so aus: {"":"", "":"", "":"", .....}

Ich benötige allerdings verschachtelte Requests. Hier mal ein Beispiel:

Code:
{"header":{"clientRevision":"20100412.13","token":"xxx","uuid":"xxx","client":"gslite","session":"xxx","country":{"CC2":"0","CC1":"18014398509481984","ID":"55","CC4":"0","CC3":"0"}},"parameters":{"query":"someArtist","type":"Songs"},"method":"getSearchResults"}
Wie lässt sich diese Verschachtelung erzeugen ?

Gruß Yannic

geskill 24. Sep 2011 12:25

AW: Json Post mit Indy ?
 
Ich würde es mal so probieren, weiß es aber auch nicht genau:
Delphi-Quellcode:
  _lkJSONobjectparameters.Add('query', 'value');
  _lkJSONobjectparameters.Add('type', 'Songs');

  // ...
  _lkJSONobject.Add('parameters', TlkJSON.GenerateText(_lkJSONobjectparameters));
  _lkJSONobject.Add('method', 'getSearchResults');


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz