bojan gavrilovic
bojan gavrilovic

Reputation: 167

Delphi RestClient on Mac and Windows

I have server (WebBroker) and client (RestClient) applications. The server is executed on Windows, and one of its methods looks like this:

procedure TWM.KlijentiFirmeGet(Request: TWebRequest; Response: TWebResponse);
var
  Sve       : Boolean;
  FirmaID   : String;
  firme     : TFirme_Klijenti;
begin
  try
    Sve       := Request.QueryFields.Values['sve'].ToBoolean;
  except
    Sve       := False;
  end;
  try
    FirmaID   := Request.QueryFields.Values['firmaID'];
  except
    FirmaID   := EmptyStr;
  end;

  firme   := TFirme_Klijenti.Create;
  try
    Response.ContentType  := 'application/json; charset=utf-8';
    if Sve then
      Response.Content    :=  Firme.PreuzmiSveFirme.ToJSON
    else
      Response.Content    :=  Firme.PreuzmiFirmu(FirmaID).ToJSON;
  finally
    firme.Free;
  end;
  Response.StatusCode := 200;
end;

Returning value of the Firme.PreuzmiSveFirme method is in TJSONArray format.

On the client side, calling the method looks like this:

function TConnection.IzvrsiAkciju(params: TJSONObject): TJSONValue; safecall;
var
  ini : TIniFile;

  adresa : string;
  port   : Integer;

  putanja: string;
  metod  : Integer; //0 - get, 1 - POST, 2 - PUT, 3 - Delete
  header : TJSONArray;
  JV     : TJSONValue;

  str   : string;
  kljuc, vrednost : string;
begin
  var RESTClient        := TRESTClient.Create(nil);
  var RESTResponse      := TRESTResponse.Create(nil);
  var RESTRequest       := TRESTRequest.Create(nil);

  try
    RESTClient.ConnectTimeout   := 300000;


  // TODO -cMM : Interface wizard: Implement interface method
    Result  := TJSONObject.create;
    ini:=TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));

    adresa := ini.ReadString('Server', 'adresa', 'http://192.168.0.33');
    port:=ini.ReadInteger('Server', 'port', 211);

    RESTClient.BaseURL    := Adresa + ':' + port.ToString;
    RESTRequest.Client    := RESTClient;
    RESTRequest.Response  := RESTResponse;
    RESTRequest.Resource  :=params.GetValue<string>('putanja', '');

    metod:=params.GetValue<Integer>('metod', 0);
    header:=params.GetValue<TJSONArray>('header', TJSONArray.Create);

    case metod of
      0 : //Get
        begin
          str  := '';
          RESTRequest.Method    := rmGET;
          for jv in header do
          begin
            kljuc     := TJSONObject(JV).GetValue<string>('kljuc', '');
            vrednost  := TJSONObject(JV).GetValue<string>('vrednost', '');
            RESTRequest.AddParameter(kljuc, Vrednost);
          end;

          RESTRequest.Execute;

          try
            str := Trim(RestResponse.Content);
            Result  := TJSONObject.ParseJSONValue(RestResponse.Content) as TJSONArray;
          except
            Result  := TJSONArray.Create;
          end;
        end;
      1 : ;
    else ;
    end;
  finally
  end;

end;

When I execute the client on Windows, RestResponse.Content contains the whole JSONArray (converted to string). But, on MacOS, RestResponse.Content contains only [{ letters.

What I am doing wrong?

Delphi version is 12.1.

Upvotes: 0

Views: 88

Answers (0)

Related Questions