Ir para conteúdo
Fórum Script Brasil
  • 0

413 Request Entity Too Large


MAURICIOCONTI

Pergunta

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 para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...