Fórum Indy 10 - Erro Connection Closed Gracefully não retorna HTML #375203
23/09/2009
0
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
Curtir tópico
+ 0Posts
23/09/2009
Afarias
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+
Gostei + 0
23/09/2009
Prgdelphi
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.
Gostei + 0
23/09/2009
Andcarpi
Qualquer coisa, caso voce tenha acesso aos componentes TMS, recomendo o WebCopy, faz tudo isso com facilidade impressionante e poucas linhas de código.
Gostei + 0
23/09/2009
Prgdelphi
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;
Gostei + 0
23/09/2009
Afarias
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+
Gostei + 0
23/09/2009
Afarias
T+
Gostei + 0
24/09/2009
Prgdelphi
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.
Gostei + 0
24/09/2009
Prgdelphi
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...
Gostei + 0
24/09/2009
Afarias
|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...
Gostei + 0
25/09/2009
Prgdelphi
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.
Gostei + 0
28/09/2009
Prgdelphi
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.
Gostei + 0
12/07/2013
Alexandre
obrigado.
Gostei + 0
12/07/2013
Alexandre
Estou realizando mais testes, mas se puder me passar o que você fez no seu caso para resolver seria interessante.
Gostei + 0
10/02/2014
Fernando Schulz
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?
Gostei + 0
27/05/2014
Nelson Santos
www.3dsistemas.com.br
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)