Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   idHttp post con respuesta Json (https://www.clubdelphi.com/foros/showthread.php?t=94168)

aposi 10-09-2019 18:48:52

idHttp post con respuesta Json
 
Hola,
Estoy enviando un Json a una web para la inserción de datos y para el envio todo correcto.
El problema esta cuando da algun error.
Me han comentado que los posibles errores los responden en un json de respuesta a la petición, pero no se como recuperar este Json


el codigo que utilizo para enviar mi Json es el siguiente:


Código Delphi [-]


var

  sResponse: string;
  JsonToSend: TStringStream;
  IdSSL : TIdSSLIOHandlerSocketOpenSSL;
begin
  JsonToSend := TStringStream.Create(Utf8Encode(datos)); 
  respuesta := TStringStream.Create;
  try
    idHTTP.Request.ContentType := 'application/json';
    idHTTP.Request.CharSet := 'utf-8';
    IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    IdHTTP.IOHandler := IdSSL;
    IdHTTP.Request.CustomHeaders.clear;
    IdHTTP.Request.CustomHeaders.AddValue('MTC-API-KEY', 'xxxxxxxxxx');
    IdSSL.SSLOptions.Method := sslvTLSv1;
    IdSSL.SSLOptions.Method := sslvTLSv1;
    IdSSL.SSLOptions.Mode := sslmUnassigned;
    try
      form1.Memo2.Lines.Clear;
      form1.Memo2.Lines.Add(datos);
      sResponse := idHTTP.post('https://xxxxxxxxxx/index.php?entryPoint=connector', JsonToSend);
      form1.Memo1.Lines.Clear;
      Form1.Memo1.lines.Add('Response code');
      Form1.Memo1.lines.Add(inttostr(idhttp.ResponseCode));
      Form1.Memo1.lines.Add('Response text');
      Form1.Memo1.lines.Add(idhttp.ResponseText);
      Form1.Memo1.lines.Add(sResponse);
    except
      on E: Exception do begin
        Form1.Memo1.lines.Add(e.Message);
        Form1.Memo1.lines.Add('Response code');
        Form1.Memo1.lines.Add(inttostr(idhttp.ResponseCode));
        Form1.Memo1.lines.Add('Response text');
        Form1.Memo1.lines.Add(idhttp.ResponseText);
        Form1.Memo1.lines.Add(sResponse);
      end
    end;
  finally
    JsonToSend.Free;
  end;

Casimiro Notevi 10-09-2019 20:54:29

¿No te viene en sResponse?

Código Delphi [-]
sResponse := idHTTP.post('https://xxxxxxxxxx/index.php?entryPoint=connector', JsonToSend);

aposi 16-09-2019 22:20:18

Hola,
Despues de mucho investigar he encontrado la solución:
Código Delphi [-]
 IdHTTP.HTTPOptions := idHTTP1.HTTPOptions + [hoNoProtocolErrorException, hoWantProtocolErrorContent]


En el componente idHttp faltava la activacion de
hoNoProtocolErrorException y hoWantProtocolErrorContent

Casimiro Notevi 16-09-2019 23:38:50

Gracias por compartirlo.


La franja horaria es GMT +2. Ahora son las 05:31:31.

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