Autor Téma: INDY http post pro získání databáze řidičů a tras GLS  (Přečteno 1570 krát)

Offline Mirka

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 0
    • Verze Delphi: Delphi 10 Seattle
Dobrý den,
snažím se ze stránek GLS získat databázi řidičů a tras kvůli tisku štítků na balíky.
Dle dokumentace je curl příkaz následující
curl -k -X POST -d 'ctrcode=CZ&module=cities&action=getToursDB&data={"lastupdate" : "20160120133211000"}&plaininput=1&resultformat=PLAIN' http://datarequester-f01.gls-hungary.com/public/service.php

Odkaz na dokumentaci: https://drive.google.com/file/d/1_Ex3bMrShLg6kRb2XFQ8aGWljR8RX0X6/view?usp=sharing

Pokud použiji PHP, nebo formulář POST, dle příkladů v dokumentaci, data dostanu. Pokud chci použít TIDHTTP ve skriptu, výsledný kód je 200, tedy OK, ale v datech dostanu jen řetězec:
xÚ-DZ€0ŔUĚ×4´Ů!¬Ä HÁF±S ÄîPĐÝÝđழqs™!˝[ĎViůWÄ3Öę^u'ÎQM)®SČ:VFű¤T

Jde o skript v CRM systému K2 a nejsem jejich vývojář, jen implementátor u zákazníka, tak verze Delphi a Indy teprve zjišťuji.
Zatím tedy zkouším to dát sem, kdyby tam byl nějaký do očí bijící bug, který nevidím.
Zkoušela jsem nastavit různé content typy, poslat parametry v JSON formátu, zkouším response do textu i do streamu. Výsledek je pořád stejný.

Děkuji

Kód: Delphi [Vybrat]
  1. type
  2.   TWEBGLS = class
  3.    public
  4.     FILE_CZ : string;
  5.     constructor Create;
  6.     destructor Destroy; override;
  7.     procedure StahujSeznamTras(ctrcode:string[2]);
  8.    private
  9.     Http   : TIdHttp;
  10.     Params : TStringList;
  11.     Stream : TStream;
  12.     URL    : string;
  13. end;
  14.  
  15. constructor TWEBGLS.Create;
  16. begin
  17.   inherited Create;
  18.   URL  := 'http://datarequester-f01.gls-hungary.com/public/service.php';
  19.   FILE_CZ := 'c:\temp\TrasyCZ.json';
  20. end;
  21.  
  22. destructor TWEBGLS.Destroy;
  23. begin
  24.   inherited Destroy;
  25. end;
  26.  
  27. type  TZAS_TWEBGLS = class(TWEBGLS)
  28.    public
  29.     procedure NactiTrasy(state:string[2]);
  30.     constructor Create;
  31.     destructor Destroy; override;
  32.   end;
  33.  
  34. constructor TZAS_TWEBGLS.Create;
  35. begin
  36.   inherited Create;
  37. end;
  38.  
  39. destructor TZAS_TWEBGLS.Destroy;
  40. begin
  41.   inherited Destroy;
  42. end;
  43.  
  44. var Trasy : TZAS_TWEBGLS;
  45.  
  46. procedure TWEBGLS.StahujSeznamTras(ctrcode:string[2]);
  47. VAR  Data : widestring;
  48.      LParams : TStream;
  49. begin
  50.   Http := TIdHttp.Create(nil);
  51.   try
  52.     Params := TStringList.Create;
  53.     Params.add('ctrcode=CZ');
  54.     Params.add('module=cities');
  55.     Params.add('action=getToursDB');
  56.     Params.add('data= {"lastupdate" : "20190120133211000"}');
  57.     Params.add('plaininput=1');
  58.     Params.add('resultformat=PLAIN');
  59.  
  60.     try
  61.      LParams := TStringStream.CreateEnc(params.text, seUTF8);
  62.      Stream := TFileStream.Create(FILE_CZ,fmCreate);
  63. //     Http.PostStreamWithResponse(URL,LParams,Stream);
  64.      data := Http.Post(URL,Params);
  65.  
  66.     finally
  67.       Stream.Free;
  68.       Params.Free;
  69.     end;
  70.   finally
  71.     Http.Free;
  72.   end;
  73. end;
  74.  
  75. procedure TZAS_TWEBGLS.NactiTrasy(state:string[2]);
  76. begin
  77.   StahujSeznamTras(state);
  78. end;
  79.  
  80. begin
  81.    Trasy := TZAS_TWEBGLS.Create;
  82.   Trasy.NactiTrasy('CZ');
  83. end.
« Poslední změna: 25-11-2019, 13:37:29 od Radek Červinka »

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1499
  • Karma: 37
    • Pepak.net
Re:INDY http post pro získání databáze řidičů a tras GLS
« Odpověď #1 kdy: 23-11-2019, 20:39:10 »
Excellent
Rated 1 time
Co hlavička Accept-Encoding: identity?

Offline Mirka

  • Nováček
  • *
  • Příspěvků: 2
  • Karma: 0
    • Verze Delphi: Delphi 10 Seattle
Re:INDY http post pro získání databáze řidičů a tras GLS
« Odpověď #2 kdy: 24-11-2019, 12:05:38 »
Děkuji. Pomohlo to v případě response do stringu.
Funkce "http.poststreamwithresponse", která má vracet stream, se chová jako před tím. Ale tu jsem nenašla nikde zdokumentovanou, musí být asi jen v K2.
Tak jsem si ten string přehnala přes memorystream do souboru sama.

Vše funguje, díky moc.