Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   REST Debugger Parametro HEADERS no Admitido (https://www.clubdelphi.com/foros/showthread.php?t=94732)

novato_erick 15-06-2020 18:55:00

REST Debugger Parametro HEADERS no Admitido
 
Hola Chicos es un gran privilegio contar con la ayuda de muchos de ustedes:

Mi Caso tiene que ver mas que todo con la utilidad REST Debugger poseo DelphiXE7 en la que me llama la atención la herramienta sin embargo probando con un proveedor de un sistema web me dio acceso a su API en la que me dio un token la cual configuro con la herramienta mencionada el HEADERS con su respectivo nombre y Valor:
Ejemplo:
Nombre: X-IFX-Token
Value:f22db1478793f17cd4d5c2d957b608df

sin embargo observo que los parámetros de encabezado del componente RESTRequest no funciona apropiadamente ya que no me permite hacer la conexión. sin embargo probé utilizando la herramienta postman poniendo los parámetros antes mencionado y no poseo ningún problema.

Si alguien desea colaborarme escríbanme para aportar la dirección del url:

Saludos calurosos;

novato_erick

Neftali [Germán.Estévez] 16-06-2020 13:10:28

¿Exactamente cómo añades los parámetros a la cabecera en RESTDebugger?
Hay varias formas de hacerlo...

novato_erick 16-06-2020 17:40:19

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 537652)
¿Exactamente cómo añades los parámetros a la cabecera en RESTDebugger?
Hay varias formas de hacerlo...

Agradecido por recibir respuesta Neftali y es un privilegio que prestes atención a mi duda:

1-Por la misma aplicación REST Debugger de Embarcadero
Pestaña de Resquest:

GET (http://app.dominio.com/api)
Cita:

Si aplico https me manda error REST request failed: Error connecting with SSL. error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure pero este es tema de otro hilo de foro
Content-Type: application/json


Pestaña de parámetro
Add
Kind
HEADER
Name: X-IFX-Token
Value: f22db1478793f17cd4d5dfdasdcfasdfxxxxxx

y Así los otros parametros como:
Add
Kind
[GET/POS]
Name: action
Value: customers
Add
Kind
[GET/POS]
Name: action
Value: customers

2-Copiando los componente desde REST Debugger de Embarcadero y pegandolo en el modulo
y modificando igual las propiedades. //Pero en principio es lo mismo que en la primera opción presentada

3-ahora mismo intentando :

Código Delphi [-]
procedure TuConfigura.Button1Click(Sender: TObject);
var
UrlConectar: String;
RESTClient1: TRESTClient;
RESTResponse1 : TRESTResponse;
begin
UrlConectar := eURL.Text; {'http://app.dominio.com/api'; al usar https me manda el error también antes escrito error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure}
  try
    RESTClient1 := TRESTClient1.Create(nil);
       try
           RESTResponse1.Create(nil);
                 try
                     RESTClient1.BaseURL := UrlConectar;
                     RESTClient1.SetHTTPHeader('X-IFX-Token:', 'f22db1478793f17cd4d5dfdasdcfasdfxxxxxxf');
                 finally
                     RESTClient1.Free;
                 end;
              if Assigned(RESTResponse1.JSONValue) then
              begin
                 TextoRespuesta := TJson.Format(RESTResponse1.JSONValue);
              end
              else
              begin
                 TextoRespuesta := RESTResponse1.Content;
              end;
       finally
            RESTResponse1.Free;
       end;
  except
    on E: Exception do
      ShowMessage(E.ClassName + ': ' + E.Message);
  end;
end;

Agradeciendo su colaboracion;

Saludos;^\||/

Neftali [Germán.Estévez] 17-06-2020 11:19:21

¿Es la misma duda y resolución vista aquí?
Lo digo para actualizar la respuesta para otros usuarios.

novato_erick 17-06-2020 17:20:41

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 537670)
¿Es la misma duda y resolución vista aquí?
Lo digo para actualizar la respuesta para otros usuarios.

Mi consulta en tu sitio es en referencia a RESTDebugger era que al poner "https://" en el Get que trae Delphi XE7 por defecto tiene aparentemente el problema de versión en OpenSSL la cual ya fue corregido con la nueva versión. En mi post anterior comenté: que ese contratiempo es tema de otro hilo.

En este hilo tiene que ver con agregar un HEADERS Desde RESTDebugger el parámetro
Add
Kind
HEADER
Name: X-IFX-Token
Value: f22db1478793f17cd4d5dfdasdcfasdfxxxxxx

ni aunque copie al portapapeles los componentes RESTClient, RESTResponse, RESTRequest que es el que contiene las propiedades para realizar cambiar el HEADER, GET-POST, Etc para ser modificado sus propiedades y tratar de realizar la conexión .

Agradecido por que le des seguimiento a mi interrogante Neftali.


novato_erick

Neftali [Germán.Estévez] 18-06-2020 09:18:12

Hay varias formas de añadir HEADERS en RESTDebugger, deppendiendo de lo que te definan en las especificaciones.
Lo normal es hacerlo con:


Parameters/Add/Kind=HEADER y ahí verás que en NAME hay una lista de tipos predefinidos.





Si lo que tienes que enviar son temas de autentificación, se define mediante la pestaña Authentification.
Ahí también están predefinidos los tipos más habituales:

novato_erick 26-06-2020 07:27:42

Logré por fin agregar los parámetros de encabezado de esta manera:

Código Delphi [-]
procedure TuConfigura.btnGet1Click(Sender: TObject);
var
  jValue: TJSONValue;
  miparametro: string;
  RESTRequest1: TRESTRequest;
  RESTClient1: TRESTClient;
  RESTResponse1 : TRESTResponse;
begin
  try
    RESTClient1 := TRESTClient.Create(nil);
    RESTRequest1 := TRESTRequest.Create(nil);
    RESTResponse1 := TRESTResponse.Create(nil);
    try
      RESTClient1.Accept := 'application/json, text/plain; text/json';
      RESTClient1.AcceptCharset := 'UTF-8, *;q=0.8';
      RESTClient1.BaseURL := eUrlApi.Text;
      RESTClient1.HandleRedirects := True;
      RESTClient1.AcceptEncoding := 'identity';
      RESTClient1.ContentType := 'application/json';
      RESTClient1.UserAgent := 'Embarcadero RESTClient/1.0';
//      RESTClient1.SynchronizedEvents := True;
      RESTClient1.FallbackCharsetEncoding := 'UTF-8';
      RESTClient1.AllowCookies := True;


      RESTRequest1.Client := RESTClient1;
//El parametro X-IFX-Token no es un estándar definido dentro de los campos de encabezados html https://en.wikipedia.org/wiki/List_o..._header_fields
      RESTRequest1.Params.AddItem('X-IFX-Token', eToken.Text,
        TRESTRequestParameterKind.pkHTTPHEADER, [poAutoCreated]);


{En este caso aquí se presentó también el dolor de cabeza ya que usando el procedimiento
 RESTReques1.AddParameter(nName, nValue, nKind) 
la respeusta era: http://app.midominio.com/api?action=customers&page=1  Bad Request 400 -0 bytes data returnetd. blablabla}

//la solución fué agregando un Cuerpo "Body" de esta manera ya obtuve la respuesta: {"class":"GET","action":"customers","customers":[],"count":"0"}
      RESTRequest1.AddParameter('Content-Type', 'application/json',
        TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]);
      RESTRequest1.AddParameter('Accept', 'application/json',
        TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]); 

      miparametro := '{ "class": "GET", "action": ' + '"' + eParam1.Text + '",'
        + ' "page": "' + eParam2.Text + '" }';

      RESTRequest1.AddBody(miparametro, TRESTContentType.ctAPPLICATION_JSON);
      RESTRequest1.Method := TRESTRequestMethod.rmPOST;
      RESTRequest1.Timeout := 30000;
      RESTResponse1.ContentType := 'application/json';
      RESTRequest1.Response := RESTResponse1;
      RESTRequest1.Execute;

      jValue := RESTResponse1.JSONValue;
      if (ComboBox1.ItemIndex = 1) and (jValue is TJSONObject) then
        mRespuesta2.Text := jValue.ToString
      else
        mRespuesta2.Text := RESTResponse1.Content;

    finally
      RESTClient1.Free;
      RESTRequest1.Free;
      RESTResponse1.Free;
    end;
  except
    on E: Exception do
      ShowMessage(E.ClassName + ': ' + E.Message);
  end;
end;

Doy por solucionado este dilema por mi falta de experiencia en trabajar con aplicaciones web y Delphi honestamente me emocionó daré más aporte de la aplicación que estoy implementando para traer info de otro sistema que me da acceso al API.

Agradezco a Neftali por su colaboración

Saludos y Bendiciones a todos.

Neftali [Germán.Estévez] 26-06-2020 08:24:34

Gracias por el aporte de la solución final.
^\||/^\||/

genyus00 18-12-2022 20:01:03

Cita:

Empezado por novato_erick (Mensaje 537791)
Logré por fin agregar los parámetros de encabezado de esta manera:

Código Delphi [-]
procedure TuConfigura.btnGet1Click(Sender: TObject);
var
  jValue: TJSONValue;
  miparametro: string;
  RESTRequest1: TRESTRequest;
  RESTClient1: TRESTClient;
  RESTResponse1 : TRESTResponse;
begin
  try
    RESTClient1 := TRESTClient.Create(nil);
    RESTRequest1 := TRESTRequest.Create(nil);
    RESTResponse1 := TRESTResponse.Create(nil);
    try
      RESTClient1.Accept := 'application/json, text/plain; text/json';
      RESTClient1.AcceptCharset := 'UTF-8, *;q=0.8';
      RESTClient1.BaseURL := eUrlApi.Text;
      RESTClient1.HandleRedirects := True;
      RESTClient1.AcceptEncoding := 'identity';
      RESTClient1.ContentType := 'application/json';
      RESTClient1.UserAgent := 'Embarcadero RESTClient/1.0';
//      RESTClient1.SynchronizedEvents := True;
      RESTClient1.FallbackCharsetEncoding := 'UTF-8';
      RESTClient1.AllowCookies := True;


      RESTRequest1.Client := RESTClient1;
//El parametro X-IFX-Token no es un estándar definido dentro de los campos de encabezados html https://en.wikipedia.org/wiki/List_o..._header_fields
      RESTRequest1.Params.AddItem('X-IFX-Token', eToken.Text,
        TRESTRequestParameterKind.pkHTTPHEADER, [poAutoCreated]);


{En este caso aquí se presentó también el dolor de cabeza ya que usando el procedimiento
 RESTReques1.AddParameter(nName, nValue, nKind) 
la respeusta era: http://app.midominio.com/api?action=customers&page=1  Bad Request 400 -0 bytes data returnetd. blablabla}

//la solución fué agregando un Cuerpo "Body" de esta manera ya obtuve la respuesta: {"class":"GET","action":"customers","customers":[],"count":"0"}
      RESTRequest1.AddParameter('Content-Type', 'application/json',
        TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]);
      RESTRequest1.AddParameter('Accept', 'application/json',
        TRESTRequestParameterKind.pkHTTPHEADER, [poDoNotEncode]); 

      miparametro := '{ "class": "GET", "action": ' + '"' + eParam1.Text + '",'
        + ' "page": "' + eParam2.Text + '" }';

      RESTRequest1.AddBody(miparametro, TRESTContentType.ctAPPLICATION_JSON);
      RESTRequest1.Method := TRESTRequestMethod.rmPOST;
      RESTRequest1.Timeout := 30000;
      RESTResponse1.ContentType := 'application/json';
      RESTRequest1.Response := RESTResponse1;
      RESTRequest1.Execute;

      jValue := RESTResponse1.JSONValue;
      if (ComboBox1.ItemIndex = 1) and (jValue is TJSONObject) then
        mRespuesta2.Text := jValue.ToString
      else
        mRespuesta2.Text := RESTResponse1.Content;

    finally
      RESTClient1.Free;
      RESTRequest1.Free;
      RESTResponse1.Free;
    end;
  except
    on E: Exception do
      ShowMessage(E.ClassName + ': ' + E.Message);
  end;
end;

Doy por solucionado este dilema por mi falta de experiencia en trabajar con aplicaciones web y Delphi honestamente me emocionó daré más aporte de la aplicación que estoy implementando para traer info de otro sistema que me da acceso al API.

Agradezco a Neftali por su colaboración

Saludos y Bendiciones a todos.

Hola tengo una duda con esta solucion: A que corresponden estos parametros?

miparametro := '{ "class": "GET", "action": ' + '"' + eParam1.Text + '",' + ' "page": "' + eParam2.Text + '" }';

novato_erick 18-12-2022 20:31:58

Cita:

Empezado por genyus00 (Mensaje 549609)
Hola tengo una duda con esta solucion: A que corresponden estos parametros?

miparametro := '{ "class": "GET", "action": ' + '"' + eParam1.Text + '",' + ' "page": "' + eParam2.Text + '" }';

Esta api me solicitaba nombre del clie te más numero de ID en el caso de Panamá era el numero de cedula en otros países si no me equivoco es DNI

Saludos


La franja horaria es GMT +2. Ahora son las 22:34:26.

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