Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Delphi para la web
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-08-2022
andresenlared andresenlared is offline
Miembro
 
Registrado: oct 2003
Posts: 153
Poder: 21
andresenlared Va por buen camino
Error al invocar API REST

Saludos.

Estoy conociendo los componentes REST de delphi, y quiero implementar un desarrollo para enviar unos datos a un API REST.

Les comento que quiero hacer inicialmente.

Tengo que obtener un token de un API Rest. En postman cargo los parametros del header y el body, y funciona sin problema,

En delphi, entre a la herramienta RestDebugger y agrego los mismo parametros, indicando cuales para el header y cuales para el body, y no corrio.

En código fuente tengo lo siguiente.

Código Delphi [-]
  RESTClient := TRESTClient.Create(nil);
  RESTRequest := TRESTRequest.Create(nil);
  RESTResponse := TRESTResponse.Create(nil);
  RESTRequest.Client := RESTClient;
  RESTRequest.Response := RESTResponse;
  RESTRequest.Method := TRESTRequestMethod.rmPOST;

  RESTRequest.Params.AddItem('Authorization', 'Bearer ZWQxUExRa2lsOXVRMVVWT1MzbElEb2ZJVm1RYTpHd3AxYjFMZEE0SzVxbGZ4bHNWRVpkRDQ0ZWNh', pkHTTPHEADER, [poDoNotEncode]);
  RESTRequest.Params.AddItem('Content-Type', 'application-x-www-form-urlencoded', pkHTTPHEADER, [poDoNotEncode]);
  RESTRequest.Params.AddItem('grant_type', 'password', pkREQUESTBODY, [poDoNotEncode]);
  RESTRequest.Params.AddItem('username', 'userprestador', pkREQUESTBODY, [poDoNotEncode]);
  RESTRequest.Params.AddItem('password', 'gocUZVNAVN5kToPjPM2f', pkREQUESTBODY, [poDoNotEncode]);

  RESTClient.BaseURL := 'https://papi.colsanitas.com/token';

  RESTRequest.Execute;

  memo1.Lines.Text:= RestResponse.Content;

y se genera el error

{
"error_description": "Missing grant_type parameter value",
"error": "invalid_request"
}

No se si con otros componentes como en Indy se pueda hacer este tipo de parametrización.

Les agradezco su ayuda, ya que tengo muy encima este desarrollo.
__________________
Popayán-Colombia
Responder Con Cita
  #2  
Antiguo 05-09-2022
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Yo creo que los componentes están funcionando bien.
El problema es con el parámetro según el error. Revisa las opciones a la hora de configurar y enviar el parámetro grant_type.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 18-09-2022
andresenlared andresenlared is offline
Miembro
 
Registrado: oct 2003
Posts: 153
Poder: 21
andresenlared Va por buen camino
Muchas gracias por responder.

Respecto a lo que me indicas, se estan agregando los parametros en el mismo orden en que se hacen en postman, ya he probado varias formas, como creando un json y agregandolo al body como a continuacion.

Código Delphi [-]

  RESTRequest.Params.AddHeader('Authorization', 'Bearer ZWQxUExRa2lsOXVRMVVWT1MzbElEb2ZJVm1RYTpHd3AxYjFMZEE0SzVxbGZ4bHNWRVpkRDQ0ZWNh');
  RESTRequest.Params.AddHeader('Content-Type', 'application/x-www-form-urlencoded');

  RESTRequest.Params.AddBody('{"grant_type":"password"}',ctAPPLICATION_JSON);
  RESTRequest.Params.AddBody('{"username":"userprestador"}',ctAPPLICATION_JSON);
  RESTRequest.Params.AddBody('{"password":"gocUZVNAVN5kToPjPM2f"}',ctAPPLICATION_JSON);

  RESTClient.BaseURL := 'https://papi.colsanitas.com/token';

  RESTRequest.Execute;

otra forma

Código Delphi [-]
  vJSON := TJSONObject.Create;

  vJSON.AddPair('grant_type','password');
  vJSON.AddPair('username','userprestador');
  vJSON.AddPair('password','gocUZVNAVN5kToPjPM2f');

  RESTRequest.Params.AddHeader('Authorization', 'Bearer ZWQxUExRa2lsOXVRMVVWT1MzbElEb2ZJVm1RYTpHd3AxYjFMZEE0SzVxbGZ4bHNWRVpkRDQ0ZWNh');
  RESTRequest.Params.AddHeader('Content-Type', 'application/x-www-form-urlencoded');
  RESTRequest.Params.AddBody(vJSON);

  RESTClient.BaseURL := 'https://papi.colsanitas.com/token';

  RESTRequest.Execute;

El mensaje de error ahora es

{"error_description":"Client Authentication failed.","error":"invalid_client"}

Muchisimas gracias, y espero me puedas ayudar a identificar el problema.
__________________
Popayán-Colombia
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Invocar un api rest con headers IVAND Internet 16 Hace 2 Semanas 13:15:03
error en consulta rest (MAJ) Internet 3 12-01-2018 08:34:25
DataSnap REST Error HTTP/1.1 500 blaiselaborde Varios 4 09-11-2015 15:31:03
invocar a una dll lestad Varios 3 07-03-2014 18:47:54
Error al invocar procedimiento en trigger Ken_Masters MySQL 1 27-10-2007 09:53:41


La franja horaria es GMT +2. Ahora son las 15:19:52.


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
Copyright 1996-2007 Club Delphi