ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

WinHTTP - A conexão foi interrompida de modo anormal

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
marcieldeg
Colaborador
Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011
Mensagens: 1054
Localização: Vitória - ES

MensagemEnviada: Dom Ago 12, 2018 9:42 pm    Assunto: WinHTTP - A conexão foi interrompida de modo anormal Responder com Citação

Boa noite,

Importei a WinHTTP no meu projeto e estou tentando acessar uma página HTTPS, conforme código abaixo:

Código:
function TForm1.GetPage(AURL: String): String;
var
  WinHttpRequest: IWinHTTPRequest;
begin
  CoInitialize(nil);
  try
    WinHttpRequest := CoWinHttpRequest.Create;
    WinHttpRequest.Open('GET', AURL, False);
    WinHttpRequest.Send(EmptyParam);
    Result := FWinHttpRequest.ResponseText;
  finally
    FWinHTTPRequest := nil;
    CoUninitialize;
  end;
end;


Para algumas páginas funciona (ex: https://www.google.com). Para outras, obtenho o erro "A conexão com o servidor foi interrompida de modo anormal" (ex: https://sourceforge.net).

Alguma luz?
_________________
"Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!"
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
marcieldeg
Colaborador
Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011
Mensagens: 1054
Localização: Vitória - ES

MensagemEnviada: Dom Ago 19, 2018 3:20 pm    Assunto: Responder com Citação

Desisti do WinHTTP. O problema ocorria somente no Windows 7. Usei a WinInet, que é super chata de usar, mas funciona.

Código:
uses
  Windows, SysUtils, WinInet;

function WinInetErrorMsg(AErr: DWORD): string;
var
  ErrMsg: array of Char;
  ErrLen: DWORD;
begin
  if AErr = ERROR_INTERNET_EXTENDED_ERROR then
  begin
    ErrLen := 0;
    InternetGetLastResponseInfo(AErr, nil, ErrLen);
    if GetLastError = ERROR_INSUFFICIENT_BUFFER then
    begin
      SetLength(ErrMsg, ErrLen);
      InternetGetLastResponseInfo(Err, PChar(ErrMsg), ErrLen);
      SetString(Result, PChar(ErrMsg), ErrLen);
    end
    else
      Result := 'Unknown WinInet error';
  end
  else
    Result := SysErrorMessage(AErr);
end;

function GetInternetStatusCode(hURL: HINTERNET): Integer;
var
  dwIndex, dwCodeLen: DWORD;
  dwCode: array [1 .. 20] of Char;
begin
  Result := 0;
  dwIndex := 0;
  dwCodeLen := 10;
  if HttpQueryInfo(hURL, HTTP_QUERY_STATUS_CODE, @dwCode, dwCodeLen, dwIndex) then
    Result := StrToIntDef(PChar(@dwCode), 0);
end;

procedure SetInternetTimeout(hInet: HINTERNET; ATimeOut: Integer);
var
  dwTimeOut: DWORD;
begin
  dwTimeOut := ATimeOut;
  InternetSetOption(hInet, INTERNET_OPTION_CONNECT_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut));
  InternetSetOption(hInet, INTERNET_OPTION_RECEIVE_TIMEOUT, @dwTimeOut, SizeOf(dwTimeOut));
end;

function GetWebData(const AUrl: String; AStream: TMemoryStream): Integer;
var
  hInet: HINTERNET;
  hURL: HINTERNET;
  Buffer: array [0 .. 1023] of byte;
  BufferLen: Cardinal;
const
  USER_AGENT = 'Mozilla 3.0 (compatible)';
begin
  AStream.Clear;

  hInet := InternetOpen(USER_AGENT, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  SetInternetTimeout(hInet, 2000);
  try
    hURL := InternetOpenUrl(hInet, PChar(AUrl), nil, 0, 0, 0);
    Result := GetInternetStatusCode(hURL);
    try
      if Result = 200 then
      begin
        repeat
          if not InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen) then
            raise Exception.Create(WinInetErrorMsg(GetLastError));

          AStream.Write(Buffer, BufferLen);
        until BufferLen = 0;
      end;
    finally
      InternetCloseHandle(hURL);
    end;
  finally
    InternetCloseHandle(hInet);
  end;
end;

_________________
"Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!"
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Ter Ago 21, 2018 2:01 pm    Assunto: Responder com Citação

Acho que o problema pode ser por conta da segurança amigo, neste caso pode ser por causa de bibliotecas SSL.

Você sabe que tipo de biblioteca esta primeira utiliza?


Você pode utilizar o fiddler para tentar ver o que está acontecendo.


bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
marcieldeg
Colaborador
Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011
Mensagens: 1054
Localização: Vitória - ES

MensagemEnviada: Qua Ago 29, 2018 3:22 pm    Assunto: Responder com Citação

Provavelmente a padrão do Windows.
_________________
"Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!"
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Seg Set 03, 2018 1:27 pm    Assunto: Responder com Citação

Utilize o fiddler para ver o que está ocorrendo por debaixo dos panos, assim fica melhor para você saber os erros que estão acontecendo, pois este tem como monitorar o protocolo https, utilizo muito para saber como funciona certo sites.
Além de outros, mas este sniffer é o melhor, pois é bem mais intuitivo.


bye
_________________
P.O.W.E.R B.Y D.E.L.P.H.I
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB