Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Llamada API funciona solo la primera vez -Bad Request- (https://www.clubdelphi.com/foros/showthread.php?t=94289)

PEIIB 06-11-2019 13:56:12

Llamada API funciona solo la primera vez -Bad Request-
 
Buenos días compañeros.

Tengo un problemilla con una llamada API. El caso es que tengo un código que funciona, pero... sólo la primera vez!
Si ejecuto de nuevo el mismo código me da el error 'HTTP/1.1 400 Bad Request'
Este es el código. A ver si podeis echarme una mano:

Código Delphi [-]
procedure TFinici.GetProjects();
var S: TStringList;
  obj:TlkJSONbase;
  vLevel:Integer;
  Json: string;
  JsonToSend: TStringStream;
  SResposta: String;
begin
   S := TStringList.Create;

   try
     HTTP1.Request.ContentType := 'application/json';
     HTTP1.Request.BasicAuthentication:= false;
     HTTP1.Request.CustomHeaders.FoldLines := False;
     HTTP1.Request.CustomHeaders.Add('Authorization:Bearer '+ tok1+ tok2+ tok3+ tok4);  //Constantes globales
     HTTP1.Request.CharSet := 'utf-8';

     Json:= '{'
          + '  "companyId":"xxxxxxxxxxx"'
          + '}';
     //JsonToSend.Clear;   //Da error acces violation
     //JsonToSend.Free;    //Da error acces violation
     JsonToSend := TStringStream.Create(Json, TEncoding.UTF8);

     try
        //EL siguiente comando funciona solo la primera vez. En la segunda ejecución, da el error   HTTP/1.1 400 BadRequest
        sResposta := HTTP1.Post('https://api.sesametime.com/v2/project/getprojectsbycompany', JsonToSend);
     except
        on E: Exception do
          ShowMessage('Error on request: '#13#10 + e.Message);
     end;

     Memo2.Clear;
     Memo2.Text:= Sresposta;

      // Conseguir la cadena formateada (componente LkJSON).------------------------------------
      obj := TlkJSONbase.Create();
      // proteccion
      try
        vLevel := 0;
        obj := TlkJSON.ParseText(sResposta);
        // obtener respuesta formateada
        MrespOKnoms.Lines.Text := GenerateReadableText(obj, vLevel);
        Application.ProcessMessages;
      finally
        FreeAndNil(obj);
      end;

   finally
     S.Free;
     JsonToSend.Free;
   end;
end;

El componente usado es TidHTTP con un Handler IdSSLIOHandlerSocketOpenSSL, correndo en Delphi 10.3

Muchas gracias de antemano :)

orodriguezca 06-11-2019 19:04:04

Creo que el problema puede estar en esta línea:
Código Delphi [-]
   HTTP1.Request.CustomHeaders.Add('Authorization:Bearer '+ tok1+ tok2+ tok3+ tok4);

Prueba agregando una línea de código para limpiar la cabecera:

Código Delphi [-]
  HTTP1.Request.CustomHeaders.Clear;
   HTTP1.Request.CustomHeaders.Add('Authorization:Bearer '+ tok1+ tok2+ tok3+ tok4);

PEIIB 07-11-2019 09:57:40

Si funcionó!!

Muchas gracias, orodriguezca ^\||/^\||/
y a todos quienes hos hayais interesado.


Saludos cordiales


La franja horaria es GMT +2. Ahora son las 10:27:08.

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