Erro ao realizar post em JSON com RestRequest
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;
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 ;
e no botão coloquei assim;
porém tenho erro :
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.
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
Curtidas 0
Melhor post
Gabriel Baltazar
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
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;GOSTEI 1
Mais Respostas
Robson Morais
03/05/2017
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....
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....
GOSTEI 0
Diogenes Silva
03/05/2017
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;
{"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;
GOSTEI 0
Jefferson Rain
03/05/2017
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.
att.
GOSTEI 0
Rafael Mattos
03/05/2017
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
}
}
}
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
}
}
}
GOSTEI 0