Jump to content
Fórum Script Brasil
  • 0

413 Request Entity Too Large


Question

Bom dia a todos

Estou tentando enviar um JSON utilizando IDHTTP da Aba WEBSERVICES utilizando delphi XE6. Mas quando arquivo é um pouco maior esta retornando a mensagem:

HTTP/1.1 413 Request Entity Too Large

Sendo que o JSON que estou enviando tem meros 130kb. Alguém já enfrentou esse problema. Segue a configuração utilizada]

HTTPClient := TidHTTP.Create;7
  HTTPClient.Request.ContentType := 'application/json;odata=light;charset=utf-8;';
  HTTPClient.Request.Connection  := 'keep-alive';
  HTTPClient.Request.CacheControl := 'no-cache';
  HTTPClient.BoundPortMax := 5000;
  HTTPClient.ProtocolVersion := pv1_0;
  HTTPClient.Request.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
  HTTPClient.Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
  HTTPClient.IOHandler := HandlerSSL;

  JSon := TlkJSONobject.Create;
  JSonRet := TlkJSONobject.Create;

  JSon.Add('versao','1');
  JSon.Add('chave',Chave);
  JSon.Add('data','2017-01-01 00:00:00');
  i := 0;

  AssignFile(arq, 'c:\temp\jason.txt');
  Rewrite(arq);
  Writeln(arq,GenerateReadableText(JSon,i));
  CloseFile(arq);


  Resposta := HTTPClient.post('https://api.xxxx.com.br/produtos/listar','c:\temp\jason.txt');

  JSonRet := TlkJSON.ParseText(Resposta) as TlkJSONobject;

  Memo2.Lines.Add(GenerateReadableText(JSonRet,i));

Link to post
Share on other sites

11 answers to this question

Recommended Posts

  • 0
  • 0

Mas deve ser alguma coisa no componente do DELPHI, pois estou mandando um arquivo com uma foto inclusa (base64), com 130kb, eu faço o mesmo teste usando o POSTMAN, funciona normalmente, isto é, o servidor aceita informações grandes, como por exemplo fotos com 5mb (base64). Mas usando o DELPHI via HTTPCLIENT ele me retorna esse erro. Se eu enviar um arquivo de 30kb funciona normalmente. Me parece alguma configuração do HTTPCLIENT sobre o tamanho do body.

Link to post
Share on other sites
  • 0

Qual é a configuração do TidHTTP  ?

Voce experimentou mudar a configuração padrão da propriedade SendBufferSize  de 32768 para 250000 ?

O ultimo link que te passei, são informações sobre esse erro usando o JSON e como corrigi-lo

abraço

 

Link to post
Share on other sites
  • 0

Sim eu mudei essa propriedade e também a Contentlength de acordo com o tamanho do arquivo sendo enviado. veja abaixo como esta a configuração, mas continuo com o mesmo erro.

 Handler := TIdSSLIOHandlerSocketOpenSSL.Create;
  JsonStreamRetorno := TStringStream.Create('');
  HTTPClient := TidHTTP.Create;
  HTTPClient.Request.Clear;
  HTTPClient.Request.ContentType := 'application/json';
  HTTPClient.ProtocolVersion := pv1_0;
  HTTPClient.Request.Accept := '*/*';
  HTTPClient.Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
  HTTPClient.Request.AcceptEncoding := 'gzip, deflate';
  HTTPClient.Request.Connection := 'keep-alive';
  HTTPClient.Request.CacheControl := 'no-cache';
  HTTPClient.Request.ContentEncoding := 'utf-8';
  HTTPClient.IOHandler := Handler;
  Handler.SendBufferSize := 250000;
  JSonRet := TlkJSONobject.Create;

  AssignFile(myFile, 'c:\temp\jason.txt');
  Reset(myFile); 
  myFileSize := FileSize(myFile);
  HTTPClient.Request.ContentLength := MyFileSize;
  CloseFile(myFile);

  Resposta := HTTPClient.post('https://api.emacro.com.br/fotos/criar','c:\temp\jason.txt');

  JSonRet := TlkJSON.ParseText(Resposta) as TlkJSONobject;
  Memo2.Lines.Add(GenerateReadableText(JSonRet,i));

Link to post
Share on other sites
  • 0

experimenta dessa maneira

var
   Resposta: String;
   fsParams: TFileStream;
begin

   fsParams := TFileStream.Create('c:\temp\jason.txt', fmOpenRead or
   fmShareDenyNone);

   Handler := TIdSSLIOHandlerSocketOpenSSL.Create;

   JsonStreamRetorno := TStringStream.Create('');

   HTTPClient := TidHTTP.Create;
   HTTPClient.Request.Clear;
   HTTPClient.Request.ContentType := 'application/json';
   HTTPClient.ProtocolVersion := pv1_0;
   HTTPClient.Request.Accept := '*/*';
   HTTPClient.Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';
   HTTPClient.Request.AcceptEncoding := 'gzip, deflate';
   HTTPClient.Request.Connection := 'keep-alive';
   HTTPClient.Request.CacheControl := 'no-cache';
   HTTPClient.Request.ContentEncoding := 'utf-8';
   HTTPClient.IOHandler := Handler;
   Handler.SendBufferSize := 250000;
   JSonRet := TlkJSONobject.Create;

   //AssignFile(myFile, 'c:\temp\jason.txt');
   //Reset(myFile);
   //myFileSize := FileSize(myFile);
   //HTTPClient.Request.ContentLength := MyFileSize;
   //CloseFile(myFile);

   Resposta := HTTPClient.post('https://api.emacro.com.br/fotos/criar',fsParams);
   ShowMessage(Resposta);

   JSonRet := TlkJSON.ParseText(Resposta) as TlkJSONobject;
   Memo2.Lines.Add(GenerateReadableText(JSonRet,i));

end;

abraço

Link to post
Share on other sites
  • 0

Bom dia Jhonas

Infelizmente deu o mesmo resultado. E fiz o teste enviando pelo POSTMAN, e funciona perfeitamente. Talvez se eu conseguir capturar o CODE gerado no DELPHI eu consiga analisar qual a diferença dele em relação ao CODE gerado no POSTMAN.

Já tentei usar com o componente visual do IDHTTP e do HANDLER, para testar diversas configurações diferentes, mas não estou conseguindo. E sempre que crio um post com uma informação um pouco maior ele dá essa mensagem. Talvez algo relacionado ao tamanho dos blocos de dados sendo transmitidos e não com o tamanho do arquivo como um todo.

Link to post
Share on other sites
  • 0

Testei o seu código, o erro é que não encontra a biblioteca SSL ( pois não tenho ela instalada )

voce consegue enviar o arquivo sem usar o JSON ?

OBS: Em um dos links que te passei, para contornar isso, o arquivo foi dividido e depois enviado ( tem um exemplo lá ).

abraço

 

Link to post
Share on other sites
  • 0

Olá Jhonas

Infelizmente o servidor para onde estou enviando as informações só aceita JSON. E não tenho como dividir o arquivo pois se trata simplesmente de 1 foto, isto é, cada JSON enviado se referente a uma foto em formato BASE64. Quando estive subindo produtos e outras informações eu dividi de forma a não dar esse problema. Mas como  agora como estou subindo foto por foto dos produtos, toda foto com mais de 32kb dá esse problema. E não tenho como mandar isso de forma diferente, e esse problema só ocorre pelo delphi.

Estou iniciando estudo usando os componentes REST do DELPHI para ver se por eles funciona, mas vou levar um tempo grande para isso, mas nunca usei antes. Achei que pelo INDY seria simples e até foi, mas agora me deparei com esse problema.

 

Link to post
Share on other sites
  • 0

Infelizmente o servidor para onde estou enviando as informações só aceita JSON.

Esse servidor não tem um WebService ?

Esse servidor não tem o MYSQL nativo ?  Se sim, voce pode fazer o upload para o MYSQL sem usar o JSON

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148674
    • Total Posts
      644490
×
×
  • Create New...