Indy 10 - Erro Connection Closed Gracefully não retorna HTML
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.
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
Curtidas 0
Respostas
Afarias
23/09/2009
´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+
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
Prgdelphi
23/09/2009
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.
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
Andcarpi
23/09/2009
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.
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
Prgdelphi
23/09/2009
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:
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
Afarias
23/09/2009
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+
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
Afarias
23/09/2009
Ahh... quando isso ocorre, se passou bastante tempo depois da chamada do Get ou é imediatamente após?
T+
T+
GOSTEI 0
Prgdelphi
23/09/2009
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.
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
Prgdelphi
23/09/2009
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...
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
Afarias
23/09/2009
|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...
|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
Prgdelphi
23/09/2009
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.
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
Prgdelphi
23/09/2009
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.
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
Alexandre
23/09/2009
Olá, estou com o problema idêntico ao seu, como resolveu, poderia me ajudar.
obrigado.
obrigado.
GOSTEI 0
Alexandre
23/09/2009
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.
Estou realizando mais testes, mas se puder me passar o que você fez no seu caso para resolver seria interessante.
GOSTEI 0
Fernando Schulz
23/09/2009
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?
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
Nelson Santos
23/09/2009
Desenvolva softwares 3D em Delphi 7
www.3dsistemas.com.br
www.3dsistemas.com.br
GOSTEI 0