Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 205 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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;
 

  • 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
  Em 23/10/2024 at 13:43, 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?

Expandir  

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.

  Em 23/10/2024 at 14:29, 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.

Expandir  

Arimateia,
Realmente eles estão solicitando cURL completo.

Postado
  Em 23/10/2024 at 14:50, Juliomar Marchetti disse:

Bingo.

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

Expandir  

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.

  Em 23/10/2024 at 15:17, Arimateia Jr disse:

@Silvio Vale

image.png

Seria isso que você quer?

Expandir  

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
  Em 23/10/2024 at 18:56, 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

Expandir  

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 19: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.

Expandir  

Ok,

Vou refazer o código e realizar novo teste.

Obrigado!

  • Moderadores
Postado
  Em 24/10/2024 at 20:36, Silvio Vale disse:

Ok,

Vou refazer o código e realizar novo teste.

Obrigado!

Expandir  
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: juliomar_m@yahoo.com.br
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

Postado
  Em 24/10/2024 at 21: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;

 

Expandir  

Vou testar.

Muito obrigado!!

  • Este tópico foi criado há 205 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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.