Erro ao realizar post em JSON com RestRequest
03/05/2017
0
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
Post mais votado
04/05/2017
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
Mais Posts
04/05/2017
Robson Morais
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....
01/09/2018
Diogenes Silva
{"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;
13/09/2018
Jefferson Rain
att.
14/12/2018
Rafael Mattos
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
}
}
}
Clique aqui para fazer login e interagir na Comunidade :)