Fórum Integração API Rest utilizando Json #488651
12/08/2014
0
Nesta API eu tenho que enviar um Json e pegar no retorno outro Json.
Eu consigo conectar e enviar o conteúdo mas o retorno está vindo em branco.
Não sei se estou fazendo algo errado, estou quebrando a cabeça a 3 dias e nada.
Segue código abaixo:
var
URL, Retorno: String;
JsonStreamRetorno, JsonStreamEnvio: TStringStream;
begin
URL := 'https://endereço da API';
JsonStreamEnvio := TStringStream.Create('AQUI VAI O CONTEÚDO NO FORMATO Json');
JsonStreamRetorno := TStringStream.Create('');
// Init request:
try
idHttp.Request.ContentType := 'application/json';
idhttp.Request.Charset := 'UTF-8';
IdHttp.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
// Set username and password:
idHttp.Request.Clear;
idHttp.Request.BasicAuthentication := False;
idHttp.Request.Username := 'usuario';
idHttp.Request.password := 'senha';
idHttp.Response.ContentType := 'application/json';
idHttp.Response.CharSet := 'UTF-8';
idHttp.Post(URL, JsonStreamEnvio, JsonStreamRetorno);
//> Também tentei assim mas tb não funcionou
//>Retorno := idHttp.Post(URL, JsonStreamEnvio);
finally
//> Nenhuma dessas formar funciou para pegar o retono
memo2.Lines.LoadFromStream(JsonStreamRetorno);
memo2.Lines.add('1=' + JsonStreamRetorno.DataString);
memo2.Lines.add('3=' + Retorno);
end;
end;
Jonas Schen
Curtir tópico
+ 1Posts
12/08/2014
Jonas Schen
Descobri uma parte do problema, na verdade o meu código está certo.
O problema é que dentro da API possui um tratamento de regra de negócio e caso alguma regra não seja satisfeita, ele retorna o erro 422 e retorna dentro do Json uma mensagem de erro.
O problema é que aparentemente o componente idHttp interpreta isto como um erro e "estoura" uma exceção e mostra uma mensagem de erro, e não devolve o retorno do POST.
Alguém já passou por isso? Tem como fazer o componente não gerar esta exceção ?
Gostei + 0
12/08/2014
William
Gostei + 0
12/08/2014
Jonas Schen
Mas se pegar o E.message irá mostrar apenas o erro HTTP, ou seja, "HTTP 1.1 422 - Unknown error".
Mas o que eu preciso é a mensagem que retorna no conteúdo do Json, por exemplo, "Cliente não localizado."
Gostei + 0
13/08/2014
Jonas Schen
Contribuição muito valiosa do meu colega Thiago Blom.
try
idHttp.Post(URL, JsonStreamEnvio, JsonStreamRetorno);
except
on E:EIdHTTPProtocolException do
ShowMessage(e.ErrorMessage);
end;
Gostei + 0
13/08/2015
Roberto Fermino
Gostei + 0
04/05/2017
Robson Morais
Gostei + 0
24/07/2019
Eduardo Alves
só faltou pegar a resposta:
sResposta := idHttp.Post(URL, JsonStreamEnvio, JsonStreamRetorno);
Gostei + 0
29/08/2022
Sergio Lopes
só faltou pegar a resposta:
sResposta := idHttp.Post(URL, JsonStreamEnvio, JsonStreamRetorno);
Boa tarde ! Estou com o mesmo problema, não consigo pegar o retorno da API quando dá excessão, o erro 422 retorna um json que tem o motivo do erro e não consigo pegar o retorno, alguem conseguiu resolver,? o exemplo acima não deu certo. obrigado!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)