Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 175 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;
 

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!!

  • Este tópico foi criado há 175 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.

The popup will be closed in 10 segundos...