Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir codigo INDY en REST (https://www.clubdelphi.com/foros/showthread.php?t=95459)

lbidi 15-11-2021 16:45:59

Convertir codigo INDY en REST
 
Buenas a todos.
Tengo el siguiente codigo usando INDY para enviar datos en JSON a un servidor REST y esperar otro JSON en respuesta.
Código Delphi [-]
            ReqJson := TStringStream.Create(jData.ToString, TEncoding.UTF8);
            try
                DM_CFE.IDHTTP_Doc.Request.ContentType             := 'application/json';
                DM_CFE.IDHTTP_Doc.Request.CustomHeaders.FoldLines := False;
                DM_CFE.IDHTTP_Doc.Request.CustomHeaders.Add('Authorization:' + cAuthCode );
                RespJson := DM_CFE.IDHTTP_Doc.Post(URL, ReqJson);
            except
                on E: EIdHTTPProtocolException do
                begin
                    jData     := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes( E.ErrorMessage ),0) as TJSONObject;
                    cErrorCfe := jData.Get('developerMessage').JsonValue.Value;
                end;
                on E: Exception do
                begin
                    jData     := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes( E.Message ),0) as TJSONObject;
                    cErrorCfe := jData.Get('developerMessage').JsonValue.Value;
                end;
            end;

Mi problema es que este codigo en una pc funciona y en otra de la misma red da error.
Me gustaria convertirlo a los nuevos componentes REST. Lo he hecho de esta manera pero no estoy seguro si me falta algo
Código Delphi [-]
            
            DM.Rest_Client_Pedido.BaseURL                := Url;

            DM.Rest_Request_Pedido.Params.Clear;
            DM.Rest_Request_Pedido.Params.AddItem;
            DM.Rest_Request_Pedido.Params[0].name        := 'Authorization';
            DM.Rest_Request_Pedido.Params[0].value       := cAuthCode;
            DM.Rest_Request_Pedido.Params[0].Kind        := pkGETorPOST;
            DM.Rest_Request_Pedido.Params[0].Options     := [TRESTRequestParameterOption.poDoNotEncode];

            DM.Rest_Request_Pedido.Params.AddItem;
            DM.Rest_Request_Pedido.Params[1].name        := 'body';
            DM.Rest_Request_Pedido.Params[1].value       := jData.ToString;
            DM.Rest_Request_Pedido.Params[1].ContentType := ctAPPLICATION_JSON;
            DM.Rest_Request_Pedido.Params[1].Kind       := pkREQUESTBODY;

            try
                try
                    DM.Rest_Request_Pedido.Execute;
                except
                    Application.MessageBox(PChar('Se produjo un error.' + #13#10#13#10 + 'Reintente por favor.'), PChar('ATENCION !!!'), MB_OK + MB_ICONWARNING + MB_TOPMOST);
                    Abort;
                end;
            finally
            end;

Me pueden indicar donde esta mi error al convertir ese codigo ??

Gracias

lbidi 15-11-2021 17:30:31

Gracias ya encontre mi problema.

Esta linea
Código Delphi [-]
DM.Rest_Request_Pedido.Params[0].Kind        := pkGETorPOST;
la debia cambiar por
Código Delphi [-]
DM.Rest_Request_Pedido.Params[0].Kind        := pkHTTPHEADER;

Saludos

Neftali [Germán.Estévez] 16-11-2021 09:28:16

Para estas cosas lo más fácil es realizar las peticiones con RestDebugger y de ahí pasar el código (la propia aplicación genera código).


La franja horaria es GMT +2. Ahora son las 23:34:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi