Ir para conteúdo
  • Cadastre-se

dev botao

TRESTRequest: Adicionar parâmetros no Body em um request do tipo POST. Delphi Tokyo


Ver Solução Respondido por André,

Recommended Posts

Postado

Boa tarde. Estou precisando consumir uma API (Metodo Post), utilizando o trio (TRESTRequest,Client e Response), porém não consigo passar os parâmetros no body.

A autenticação funciona. 

Abaixo o código (já tentei de outras formas). Esse é erro que retorna.

--

Resposta JSON: {
  "error":"Request body could not be read properly."
}

Código da resposta: 400
Status da resposta: Bad Request

------

Se alguém puder postar algum exemplo tirando minha dúvida, eu agradeço.

procedure TforAtualProdutosRD.btnIncluirClick(Sender: TObject);
Var
  i: SmallInt;
  Json: string;

begin
  RESTClient1.BaseURL := 'https://crm.rdstation.com/api/v1/products';
  RESTClient1.AddParameter('token','código do token');

  RESTClient1.Accept := 'application/json';
  RESTClient1.ContentType := 'application/json';

  JSON :='{"product": {"description": "TESTE","name": "TESTE DO TESTE","base_price": "111"}}';

  RESTRequest1.AddBody(Json, TRESTContentType.ctAPPLICATION_JSON);

  RESTRequest1.Execute;

  Memo1.Lines.Add('Resposta JSON: ' + RESTRequest1.Response.JSONText);

  Memo1.Lines.Add('Código da resposta: ' + IntToStr(RESTRequest1.Response.StatusCode));

  Memo1.Lines.Add('Status da resposta: ' + RESTRequest1.Response.StatusText);
end;

  • Moderadores
Postado
unit Unit1;

interface

uses
  Vcl.Forms, Vcl.StdCtrls, REST.Client, REST.Types, System.Classes, System.SysUtils;

type
  TForm1 = class(TForm)
    btnCreateProduct: TButton;
    RestClient1: TRestClient;
    RestRequest1: TRestRequest;
    RestResponse1: TRestResponse;
    procedure btnCreateProductClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  RestClient1.BaseURL := 'https://api.rd.services';
  RestClient1.Params.AddHeader('Authorization', 'Bearer YOUR_ACCESS_TOKEN');
  RestRequest1.Client := RestClient1;
  RestRequest1.Method := rmPOST;
  RestRequest1.Resource := '/crm/v1/products';
  RestRequest1.Params.Clear;
  RestRequest1.Params.AddItem('Content-Type', 'application/json', pkHTTPHEADER, [poDoNotEncode]);
end;

procedure TForm1.btnCreateProductClick(Sender: TObject);
var
  JSONBody: string;
begin
  JSONBody := '{"name": "Produto de Teste", "code": "12345", "unit_value": 1000}';
  RestRequest1.AddBody(JSONBody, ctAPPLICATION_JSON);

  try
    RestRequest1.Execute;

    if RestResponse1.StatusCode = 201 then
      ShowMessage('Produto criado com sucesso!')
    else
      ShowMessage('Erro ao criar produto: ' + RestResponse1.Content);
  except
    on E: Exception do
      ShowMessage('Erro: ' + E.Message);
  end;
end;

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

Obrigado Juliomar pelo retorno, porém, infelizmente não funcionou...

Fiz pequenos ajustes no exemplo que vc mandou. Autoriza o acesso a API e tudo, mas continua dando erro (Abaixo).

image.png.2262162f65882c0a71e9b7d5123f467c.png

Pelo POSTMAN funciona (telas abaixo), mas não aplicação DELPHI não vai. Parece até erro do delphi (não quero acreditar nisso).

image.png.cbcc629a198ffa6335bfbcb834ef30b0.png

image.png.83e83eb6edeed10c881132b1a81a79a4.png

image.png.240a3f622c51e72ff0e3d6eea9f1efa8.png

image.png.b2910517fb2b2afed0da50a24cf787e4.png

procedure TforAtualProdutosRD.FormCreate(Sender: TObject);
begin
  inherited;
//  RestClient1.BaseURL := 'https://api.rd.services';
  RestClient1.BaseURL := 'https://crm.rdstation.com';
//  RestClient1.Params.AddHeader('Authorization', 'Bearer 66b256661b500c000fdced63');
  RestClient1.Params.AddHeader('Host', 'crm.rdstation.com');
  RESTClient1.AddParameter('token','meu token');
  RestRequest1.Client := RestClient1;
  RestRequest1.Method := rmPOST;
  RestRequest1.Resource := '/api/v1/products';
  RestRequest1.Params.Clear;
  RestRequest1.Params.AddItem('Content-Type', 'application/json', pkHTTPHEADER, [poDoNotEncode]);
end;

procedure TforAtualProdutosRD.BitBtn1Click(Sender: TObject);
var
  JSONBody: string;
begin
  JSONBody :='{"name": "TESTE DO TESTE"}';
  RestRequest1.AddBody(JSONBody, ctAPPLICATION_JSON);

  try
    RestRequest1.Execute;

    if RestResponse1.StatusCode = 200 then
      ShowMessage('Produto criado com sucesso!')
    else
      ShowMessage('Erro ao criar produto: ' + RestResponse1.Content);
  except
    on E: Exception do
      ShowMessage('Erro: ' + E.Message);
  end;
end;
 

  • Solution
Postado

Juliomar, só para constar, testei na versão 12.2 do Delphi e FUNCIONOU.

Creio que eu posso dizer que é problema na versão do Delphi.

Obrigado pelo auxílio. Foi de grande valia para que eu chegasse a essa conclusão.

  • Curtir 1

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.