Ir para conteúdo
  • Cadastre-se

dev botao

Recommended Posts

Postado

Bom dia!
Sou iniciante no projeto ACBr e estou utilizando o componente TAcbrHTTp para consumir uma API conforme exemplo abaixo. Gostaria de saber como faço para verificar o conteúdo da requisição cURL para que eu possa conferir os  respectivos dados enviados. Procurei no fórum e não encontrei algo semelhante.

var
  httpSend  : TAcbrHTTp;
  stmParametros: TStringStream;
  jsonObjClient: TJSONObject;
  vrURL, vrRetorno: String;
begin
    jsonObjClient  := TJSONObject.Create;
    jsonObjClient.AddPair('id', '22');
    jsonObjClient.AddPair('formato', 'JSON');
    vrURL := 'https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    httpSend := TACBrHTTP.Create(nil);
    try
      stmParametros := TStringStream.Create(jsonObjClient.ToString);
      try
        try
          httpSend.HTTPSend.Clear;
          httpSend.HTTPSend.MimeType := 'application/json';
          httpSend.HTTPSend.Headers.Add('authorization:Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
          httpSend.HTTPSend.Headers.Add('Accept-Charset: utf-8');
          httpSend.HTTPSend.Document.LoadFromStream(stmParametros);
          httpSend.HTTPPost(vrURL);
        except on E: Exception do
          begin
            Application.ProcessMessages;
            ShowMessage(E.Message);
          end;
        end;
        vrRetorno := Trim(httpSend.RespHTTP.Text);
      finally
        FreeAndNil(httpSend);
      end;
    finally
      FreeAndNil(httpSend);
    end;
end;
 

Postado
14 minutos atrás, Juliomar Marchetti disse:

Não tem.

tu pode pegar e tentar escrever algo dentro do código para pegar.

lembrando que tu vai ter que alterar o synapse pois é ele quem roda por baixo dos panos

Entendi..

Obrigado!!

  • Moderadores
Postado

Bom dia, @Silvio Vale.

Pelo que entendi, você deseja verificar o conteúdo que está sendo enviado na requisição HTTP, é isso?

Nesse caso, como você está utilizando um objeto JSON (jsonObjClient), pode simplesmente conferir o resultado de jsonObjClient.ToString, que representa o corpo da requisição em formato JSON.

Exemplo:

ShowMessage(jsonObjClient.ToString);

Isso exibirá o JSON no formato que será enviado na requisição, permitindo que você confira os dados.

Postado
46 minutos atrás, Juliomar Marchetti disse:

Mas qual seria o objetivo? com o componente tu consegue pegar e tratar possíveis erros no consumo

é alguma API não publica?

Não.
A API é publica sim.
O problema é que não estamos conseguindo identificar um determinado erro e a empresa que desenvolveu a API nos solicitou o curl --location para nos ajudar a identificá-lo.

2 minutos atrás, Silvio Vale disse:

Não.
A API é publica sim.
O problema é que não estamos conseguindo identificar um determinado erro e a empresa que desenvolveu a API nos solicitou o curl --location para nos ajudar a identificá-lo.

Arimateia,
Realmente eles estão solicitando cURL completo.

Postado
3 horas atrás, Juliomar Marchetti disse:

Bingo.

passa a API e vamos ver se entendemos o que tá pegando?

API
https://api.tiny.com.br/api2/pedido.obter.php
Documentação
https://tiny.com.br/api-docs/api2-pedidos-obter
Serviço
Obter Pedido

No exemplo que enviei acima não consta o dado toke, porém o mesmo consta em nossa aplicação
 jsonObjClient  := TJSONObject.Create;
 jsonObjClient.AddPair('token', 'XXXXXXXXXX');
 jsonObjClient.AddPair('id', '22');
 jsonObjClient.AddPair('formato', 'JSON');

Vou verificar com o suporte se eles disponibilizam um token para ambiente de teste.

2 horas atrás, Arimateia Jr disse:

@Silvio Vale

image.png

Seria isso que você quer?

Algo semelhante a isso:

curl --location 'https://api.tiny.com.br/api2/pedidos.pesquisa.php?token=700576c1b554d758863e7b399398c7de888566bbd4c5972808338a7bd3940b6a&formato=json' \
--header 'Cookie: __cf_bm=B.Fmxnhyz1N7ShQ21vRvh108f0.PXEK9BAo_aH6xMvc-1729513669-1.0.1.1-KvcHD2DkHzzSkDNnJY9yT2zJsAm9us5gTLv19yKnNk8wjgbLTdPW2eUXDB_xTk8p94sfLIEwH2f1PAoqIKr5mQ'
Postado
29 minutos atrás, Juliomar Marchetti disse:

Hum mas olhando esse seu token tu não manda

image.png

tu manda abaixo mas dai é no header somente, mas eles querem pelo que entendi lá também

image.png

Somente não enviei o token no exemplo que postei aqui no fórum, mas na aplicação eu envio sim. Veja...

 jsonObjClient  := TJSONObject.Create;
 jsonObjClient.AddPair('token', 'XXXXXXXXXX');
 jsonObjClient.AddPair('id', '22');
 jsonObjClient.AddPair('formato', 'JSON');

  • Moderadores
Postado

@Silvio Vale

Lendo a documentação, vi que a requisição está sendo feita através do componente TACBrHTTP de forma incorreta. Você está tentando fazer uma requisição POST usando JSON no corpo da requisição, mas a API que você está tentando consumir espera que os parâmetros sejam enviados de uma das seguintes formas:

  1. curl -X GET "https://api.tiny.com.br/api2/pedido.obter.php?token=xxxx&formato=JSON&id=22"
  2. curl -X POST "https://api.tiny.com.br/api2/pedido.obter.php" \
    -H "Content-Type: multipart/form-data" \
    -F "token=xxxx" \
    -F "formato=JSON" \
    -F "id=22"

A primeira opção utiliza o método GET com os dados na URL. A segunda opção faz uma requisição POST com os parâmetros enviados via form-data.

Refatore o código Delphi que utiliza o TACBrHTTP para refletir uma dessas abordagens.

Postado
Em 23/10/2024 at 16:32, Arimateia Jr disse:

@Silvio Vale

Lendo a documentação, vi que a requisição está sendo feita através do componente TACBrHTTP de forma incorreta. Você está tentando fazer uma requisição POST usando JSON no corpo da requisição, mas a API que você está tentando consumir espera que os parâmetros sejam enviados de uma das seguintes formas:

  1. curl -X GET "https://api.tiny.com.br/api2/pedido.obter.php?token=xxxx&formato=JSON&id=22"
  2. curl -X POST "https://api.tiny.com.br/api2/pedido.obter.php" \
    -H "Content-Type: multipart/form-data" \
    -F "token=xxxx" \
    -F "formato=JSON" \
    -F "id=22"

A primeira opção utiliza o método GET com os dados na URL. A segunda opção faz uma requisição POST com os parâmetros enviados via form-data.

Refatore o código Delphi que utiliza o TACBrHTTP para refletir uma dessas abordagens.

Ok,

Vou refazer o código e realizar novo teste.

Obrigado!

  • Moderadores
Postado
38 minutos atrás, Silvio Vale disse:

Ok,

Vou refazer o código e realizar novo teste.

Obrigado!

var
  LSend  : TACBrHTTP;
  LURL, LRetorno: String;
begin
    LURL := 'https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    LSend := TACBrHTTP.Create(nil);
    try
    try
      LSend.HTTPSend.Clear;
      LSend.HTTPSend.MimeType := 'application/json';
      LSend.HTTPSend.Headers.Add(
        'authorization:Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
      LSend.HTTPSend.Headers.Add('Accept-Charset: utf-8');
      LSend.URLQueryParams.AddPair('id', '22');
      LSend.URLQueryParams.AddPair('formato', 'JSON');
      LSend.URLQueryParams.AddPair(
        'token', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
      LSend.HTTPPost(LURL);
    except
      on E: Exception do
      begin
        Application.ProcessMessages;
            ShowMessage(E.Message);
          end;
        end;
        LRetorno := Trim(LSend.HTTPResponse);
    finally
      FreeAndNil(LSend);
    end;

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado
Em 24/10/2024 at 18:15, Juliomar Marchetti disse:
var
  LSend  : TACBrHTTP;
  LURL, LRetorno: String;
begin
    LURL := 'https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    LSend := TACBrHTTP.Create(nil);
    try
    try
      LSend.HTTPSend.Clear;
      LSend.HTTPSend.MimeType := 'application/json';
      LSend.HTTPSend.Headers.Add(
        'authorization:Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
      LSend.HTTPSend.Headers.Add('Accept-Charset: utf-8');
      LSend.URLQueryParams.AddPair('id', '22');
      LSend.URLQueryParams.AddPair('formato', 'JSON');
      LSend.URLQueryParams.AddPair(
        'token', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
      LSend.HTTPPost(LURL);
    except
      on E: Exception do
      begin
        Application.ProcessMessages;
            ShowMessage(E.Message);
          end;
        end;
        LRetorno := Trim(LSend.HTTPResponse);
    finally
      FreeAndNil(LSend);
    end;

 

Vou testar.

Muito obrigado!!

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.