GARANTIR DESCONTO

Fórum Indy 10 - Erro Connection Closed Gracefully não retorna HTML #375203

23/09/2009

0

Estou com o seguinte problema usando Indy 10 com delphi 2006.

Estou dando um get em um website, para pegar a pagina de retorno e analisar o HTML.

Ocorre que na maioria das vezes, recebo um erro de Connection Closed Gracefully, mas o site esta no ar, e sem problemas, pelo menos acessando via firefox, ele não mostra nenhum erro na pagina.

O problema é que quando da esse erro de connection, o Indy não retorna para mim qual a página que ele recebeu, ou se recebeu alguma coisa. O que acho estranho, é que analisando os headers, o response code retornado é o 200 e text é HTTP/1.1 200 OK. Ou seja, a resposta do site foi OK. Além de retornar o content-length de 5188, informando que teoricamente o site enviou as informações.

O meu problema é que queria saber se existe alguma maneira que faça o indy receber esse HTML, mesmo que pela metade, para que eu possa analisar e ver o que esta ocorrendo de errado.

Obrigado.


Prgdelphi

Prgdelphi

Responder

Posts

23/09/2009

Afarias

´Connection Closed Gracefully´ não é um erro.

O Indy usa esta ´exceção´ para informar q a conexão com o servidor remoto foi terminada (de forma correta). Trate a exceção (ignorando por exemplo) e continue normalmente


T+


Responder

Gostei + 0

23/09/2009

Prgdelphi

Realmente não é um erro, mas quando o indy retorna esta exception, ele não me retorna o HTML recebido do site.

Algumas consultas quando são feitas sem retornar esta exception retornam o HTML normalmente, por isto estou na duvida de como fazer para ele retornar o html normalmente, se existe alguma propriedade no componente.


Responder

Gostei + 0

23/09/2009

Andcarpi

Verifique se voce nao está fechando a conexao antes do recebimento do arquivo, aconteceu comigo e foi só buscar um pouco no código, e era isso que estava acontecendo, sem querer um try dava um finally de fechar a conexao antes do esperado, ocorrendo o erro.

Qualquer coisa, caso voce tenha acesso aos componentes TMS, recomendo o WebCopy, faz tudo isso com facilidade impressionante e poucas linhas de código.


Responder

Gostei + 0

23/09/2009

Prgdelphi

Não estou fechando a conexão.

Desculpe, acabei não citando em nenhum lugar da minha mensagem que estou usando o TIdhhtp. Segue um resumo do codigo:

function EfetuaConsultaSite(url : string) : string;
var IE : TIDHTTP;
begin
  result := ´´;
  IE := TIdHttp.Create(nil);
  try
    IE.HandleRedirects := true;
    try
      result := IE.Get(url);
    except
      on e : exception do
        showmessage(e.message + ´ - ´ +inttostr(IE.ResponseCode)+´ - ´+ IE.ResponseText +´ - ´ + IE.Response.RawHeaders.Text);
    end;
  finally
    FreeAndNil(IE);
  end;
end;



Responder

Gostei + 0

23/09/2009

Afarias

bom, por algum motivo parece q o servidor está fechando a conexão.

Isso ocorre para uma url em especial? ou uma máquina cliente em especial? Pode ser um problema do servidor ou firewall.

Outra coisa, certifique-se de estar usando a versão mais recente do Indy 10 (10.5.6 eu acho)


T+


Responder

Gostei + 0

23/09/2009

Afarias

Ahh... quando isso ocorre, se passou bastante tempo depois da chamada do Get ou é imediatamente após?


T+


Responder

Gostei + 0

24/09/2009

Prgdelphi

Minha versão do inry é a 10.0.52.... to bem atrasado ainda vou procurar esta versão mais atualizada e testar aqui.

Este problema ocorre somente nesta URL, ou melhor em URLs deste mesmo dominio. Estou achando muito estranho, porque ja tenho varias outras consultas a websites e não ocorre este problema.

Ocorre em qualquer maquina, não passa por firewal nem nada... conexão direta.

quando ocorre não passou muito tempo não, pelo que vejo é o tempo de uma leitura normal ao site, mas que retorna com este problema. Algumas vezes, bem poucas, ele consegue acessar o site sem problemas e retorna normalmente.


Responder

Gostei + 0

24/09/2009

Prgdelphi

Aproveitando, onde posso baixar a atualização do indy? Ou eu não estou sabendo procurar ou a pagina deles é bastante bagunçada.

Lá informa que a ultima versão estavel é essa que to usando, mas também é muito antiga. Eles não lançam mais versões estaveis? Voce tem que baixar o que estão atualizando agora e dar a sorte de compilar? rs.
preciso arrumar componentes comerciais pra substituir esse indy.... desse jeito fica dificil...


Responder

Gostei + 0

24/09/2009

Afarias

|Minha versão do inry é a 10.0.52.... to bem atrasado ainda vou procurar
|esta versão mais atualizada e testar aqui.

É interessante atualizar


|Este problema ocorre somente nesta URL, ou melhor em URLs deste
|mesmo dominio. Estou achando muito estranho, porque ja tenho varias
|outras consultas a websites e não ocorre este problema.

Então me parece uma questão com o servidor em questão.

Por alguma razão, o servidor está encerrando a conexão antes de vc receber todo o conteúdo de resposta. Pode ser um problema do servidor ou uma configuração específica (de segurança por exemplo -- em relação ao tipo de requisição q vc está fazendo)


|Aproveitando, onde posso baixar a atualização do indy? Ou eu não estou
|sabendo procurar ou a pagina deles é bastante bagunçada.

O melhor é baixar os fontes com um cliente SVN (Subversion). Eu particularmente gosto do Tortoise. Se vc não tem um cliente SVN, baixe e instale o TortoiseSVN. Com ele vc baixa os fontes direto do repositório do projeto (Indy).

Guia de instalação:
http://www.indyproject.org/Sockets/Docs/Indy10Installation.EN.aspx

Guia de acesso SVN:
http://www.indyproject.org/Sockets/Download/svn.EN.aspx

Informações sobre download de atualizações:
http://www.indyproject.org/Sockets/Download/DevSnapshot.EN.aspx

Nesta última página vc encontra (No final) a opção de baixar um build via FTP ou HTTP (sem precisar do SVN) ... mas não sei qual a versão do build disponível (não sei se está sendo atualizado)


T+



Lá informa que a ultima versão estavel é essa que to usando, mas também é muito antiga. Eles não lançam mais versões estaveis? Voce tem que baixar o que estão atualizando agora e dar a sorte de compilar? rs.
preciso arrumar componentes comerciais pra substituir esse indy.... desse jeito fica dificil...


Responder

Gostei + 0

25/09/2009

Prgdelphi

Já estou entendendo melhor o que está havendo.

Primeiro, o link do site é HTTPS. A página que estava acessando direcionava pra outra pagina em um link https.
Então usei um TIdSSLIOHandlerSocketOpenSSL para fazer a conexão https, coloquei as dlls do openssl no diretorio da aplicação, liguei o IoHandler do IDHTTP neste SSL e beleza... consegui passar pela primeira pagina. Agora, estou travado em outra pagina, que preciso consultar logo depois.

o que acontece é que este site possui um certificado ssl invalido. Quando acesso pelo IE ou pelo Firefox, eles me dão essa informação e perguntam se eu quero continuar ou não (ignorar o certificado invalido). Se eu responder que quero continuar o site abre normalmente.

Mas isso não acontece no indy. Ele da o mesmo problema. Retorna ´Connection Closed Gracefully´ e não retorna nada no HTML. Acho que agora o problema é somente esse. Como faço para que o Indy ignore este certificado invalido e continue o acesso ao site?

Obrigado.


Responder

Gostei + 0

28/09/2009

Prgdelphi

Já consegui arrumar.
Era um problema no Indy mesmo. Era um trecho que desconectava ´de cara´ se houvesse algum erro no https (ex certificado invalido). Tive que alterar o fonte para este caso. Não sei se a versão mais nova já corrige este problema, mas como não posso atualizar na minha maquina esta solução deu certo pra mim.

Obrigado pela atenção.


Responder

Gostei + 0

12/07/2013

Alexandre

Olá, estou com o problema idêntico ao seu, como resolveu, poderia me ajudar.
obrigado.
Responder

Gostei + 0

12/07/2013

Alexandre

No componente TIdHTTP, mudei a propriedade hoForceEncodeParams para False em HTTPOptions e resolveu meu problema, essa propriedade vem default True.
Estou realizando mais testes, mas se puder me passar o que você fez no seu caso para resolver seria interessante.
Responder

Gostei + 0

10/02/2014

Fernando Schulz

Olá Alexandre, também estou com esse problema, efetuando testes essa alteração que fez funcionou?

no caso você disse que mudou a propriedade hoForceEncodeParams para false, nesse caso ao invés de usar IdHTTP.HTTPOptions := [hoForceEncodeParams]; , você usou alguma dessas duas propriedades (hoInProcessAuth, hoKeepOrigProtocol) no lugar?

ou alterou dentro do componente mesmo?
Responder

Gostei + 0

27/05/2014

Nelson Santos

Desenvolva softwares 3D em Delphi 7
www.3dsistemas.com.br

Responder

Gostei + 0

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

Aceitar