Erro ao realizar post em JSON com RestRequest

03/05/2017

0

Boa noite, pessoal, pessoa ajuda de vocês....
Estive hoje tentando realizar um post numa api em json...primeiramente para testar a api usei o postman e consegui, abaixo os dados em JSON de como terei que converter os meus dados que estão num DataSet;

[{
	"cod_pedidov" : "NLN04",
	"vitrine" : 2,
	"data_emissao" : "2017-04-16",
	"data_entrega" : "2017-04-16",
	"total" : 150.00,
	"quantidade" : 3,
	"v_frete" : 0,
	"produtos" : [{
			"quantidade" : 1,
			"preco" : 100.00,
			"item" : "1",
			"sku" : "1094"
		},
		{
			"quantidade" : 2,
			"preco" : 25.00,
			"item" : "2",
			"sku" : "1100"
		}		
	],
	"lancamentos" : [{
			"data_vencimento" : "2017-04-16",
			"valor_inicial" : 150.00,
			"tipo_pgto" : 12,
			"numparc" : 1,
			"bandeira" : 0,
			"operadora" : 0,
			"cod_tipo_pgto" : 1
		}
	],
	"dados_cliente" : [{
			"nome" : "CLIENTE PADRÃO MILLENNIUM BASIC",
			"rg" : "",
			"data_aniversario" : "",
			"e_mail" : "teste@lojasnalin.com",
			"tipo_sexo" : "M",
			"tratamento" : "Sr.",
			"pf_pj" : "pf",
			"cpf" : "",
			"vitrine" : 2,
			"endereco" : [{
					"logradouro" : "Rua Natalício Costa Frazão",
					"bairro" : "Parque Ipê",
					"cidade" : "São Paulo",
					"estado" : "SP",
					"cep" : "05762220",
					"numero" : "213"
				}
			]
		}
	]
}]


Enviando esses dados como post para a url [url]http://127.0.0.1:888/api/teste/pedido_venda/inclui[/url] tive sucesso....
Então partindo para o Delphi (Berlin) tentei criar uma classe ;
unit fIntegracaoVendasJSON;

interface

uses
  System.Generics.Collections, System.JSON, REST.JSON;

type
  TIntegracaoVendasJSON = class
  private
    Ftotal: Currency;
    Fcod_pedidov: String;
    Fvitrine: String;
    Fdata_emissao: TDate;
    Fquantidade: Integer;
    Fv_frete: Integer;

  public

    property cod_pedidov: string read Fcod_pedidov write Fcod_pedidov;
    property vitrine: string read Fvitrine write Fvitrine;
    property data_emissao: TDate read Fdata_emissao write Fdata_emissao;
    property total: Currency read Ftotal write Ftotal;
    property quantidade: Integer read Fquantidade write Fquantidade;
    property v_frete: Integer read Fv_frete write Fv_frete;
  end;

implementation

uses
  uSystem.JSONUtil;

{ TIntegracaoVendasJSON }


end.


e no botão coloquei assim;

procedure TfrmPlaPSync.Button3Click(Sender: TObject);
 var
  VIntegeracao: TIntegracaoVendasJSON;
  VJSONObject: TJSONObject;
begin
  VIntegeracao := TIntegracaoVendasJSON.Create;
  try
    VIntegeracao.cod_pedidov  := 'NLN04';
    VIntegeracao.vitrine      := '2';
    VIntegeracao.data_emissao := StrToDate('30/04/2017');
    VIntegeracao.total        := 216.00;
    VIntegeracao.data_emissao := StrToDate('30/04/2017');
    VIntegeracao.v_frete      := 0;

    VJSONObject := TJson.ObjectToJsonObject(VIntegeracao);

    //RESTClient1.ResetToDefaults;
   // RESTRequest1.ResetToDefaults;
   // RESTResponse1.ResetToDefaults;
    RESTClient1.BaseURL := 'http://127.0.0.1:888/api/teste/pedido_venda';

    //HTTPBasicAuthenticator1.Username := 'jorge';
   // HTTPBasicAuthenticator1.Password := '123';

    RESTRequest1.Resource := '/inclui';
    RESTRequest1.Method := TRESTRequestMethod.rmPOST;
    RESTRequest1.AddBody(VJSONObject.ToString, ContentTypeFromString('application/json'));
    RESTRequest1.Execute;

    if RESTResponse1.StatusCode = 201 then
      ShowMessage('Incluido com sucesso.');
  finally
    VIntegeracao.Free;
  end;
end;


porém tenho erro :

REST request failed: Error receiving data: (12032) A solicitação deve ser enviada novamente


Sei que não passei todos os dados, mas ele dá erro quando chega no RESTRequest1.Execute;

Estou precisando muito...e preciso saber como vou "aninhar" as informações de produtos como está no JSON acima.
Robson Morais

Robson Morais

Responder

Post mais votado

04/05/2017

A Aplicação servidora é Datasnap? Consegue colocar um debug pra saber se sua requisição delphi pelo menos está chegando lá?

Ao invés de jogar o json em RESTRequest1.AddBody(VJSONObject.ToString, ContentTypeFromString('application/json'));
Tenta colocar em RestRequest.Params
with RESTRequest1.Params.AddItem do
  begin
    ContentType := ctAPPLICATION_JSON;
    name        := 'param'; // param name
    Value       := '[{}]'; // seu json
    Kind        := pkREQUESTBODY;
  end;

Gabriel Baltazar

Gabriel Baltazar
Responder

Mais Posts

04/05/2017

Robson Morais

Bom dia,

Não é Datasnap, sinceramente não sei porque é um outro sistema que preciso integrar....

Fiz como me passou e dá o mesmo erro também....
Responder

01/09/2018

Diogenes Silva

Amigo nesse modelo que voce fez, eu tenho um JSON assim:
{"MUNICIPIOS_CODIGO":4266,"MUNICIPIOS_SIGLA":"4315958","MUNICIPIOS_DESCRICAO":"0 SIZE=2>ROLADOR 4444444444444444444444444","MUNICIPIOS_ESTADO":"RS"}

como ele ficaria nesse parametro que vc passou?, nao estou dando conta de enviar um POST usando RESTCLIENT, ele acaba mandando o JSON vazio, mas qdo eu colo a mesma url contendo o json no browser, ele vai numa boa, o que poderia ser?

url := TDiretorio.CaminhoPorta+tabela+'|'+tipo+'|'+acao+'||0|0||0|100'+iif(Caminho('TECNOLOGIA=') = 'DATAWERE','&json_encode=','&strjson=');

RestCliente.FallbackCharsetEncoding := 'UTF-8';
RestCliente.AcceptCharset := 'UTF-8, *;q=0.8';
RestCliente.ContentType := 'application/x-www-form-urlencoded';//'application/json';

RestRequest.Client := RestCliente;
RestRequest.Response := RestResponse;
RestRequest.Method := TRESTRequestMethod.rmPOST;


Clipboard.AsText := url + dados;

RestCliente.BaseURL := url + dados;
RestRequest.Execute;

Result := RestResponse.StatusText;
Responder

13/09/2018

Jefferson Rain

Olá "Robinhodemorais", passei por esse erro e no meu caso era o proxy que estava faltando, mesmo em acesso em rede local. Adicionei a configuração de proxy e resolveu. Verifique também se existe algum firewall, antivírus ou algo do gênero que possa barras o acesso.

att.
Responder

14/12/2018

Rafael Mattos

Pessoal, tudo bem?

Estou enfrentando o mesmo problema em um post com o RESTRequest. Não estou conseguindo reproduzir o que eu faço no postman no RESTRequest.

Desde já agradeço a ajuda.

Fiz assim no postman:
Na url: "https://api.powerbi.com/beta/e87d022c-68c3-40ab-a32e-6df9c352871e/datasets/87a22a05-3bc1-4ac8-8af6-12c2dedce54b/rows?key=xp2K%2FqPXMxRfnxv%2FdI%2BcYIcW2pLuZlprGD2AbUmJHoAlDV7MyfK6%2Ft%2BOuqH94wAJamavhacYGvafIIxWbAr0NQ%3D%3x"

Na aba body[raw] :
[
{
"MachineId" :1,
"ArmId" :1,
"Lap" :20001,
"LapStart" :"2018-12-14T12:13:34.236Z",
"LapStp" :"2018-12-14T12:13:34.236Z"
}
]


Retorno: Status: 200 OK


Delphi

RESTClient.BaseURL = https://api.powerbi.com

RESTRequest1.Resource := 'beta/e87d022c-68c3-40ab-a32e-6df9c352871e/datasets/87a22a05-3bc1-4ac8-8af6-12c2dedce54b/rows?key=xp2K%2FqPXMxRfnxv%2FdI%2BcYIcW2pLuZlprGD2AbUmJHoAlDV7MyfK6%2Ft%2BOuqH94wAJamavhacYGvafIIxWbAr0NQ%3D%3x';
RESTRequest1.Method := rmPost;

RESTRequest1.AddBody('['+TJSON.ObjectToJSONString(pLap)+']');

RESTRequest1.Execute;

RESTResponse1.JSONText =
{
"error":
{
"code":"KeyFoundInDeletedResourceKeyCacheException",
"pbi.error":
{
"code":"KeyFoundInDeletedResourceKeyCacheException",
"parameters":
{
}
,
"details":
[
]
,
"exceptionCulprit":1
}
}
}
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar