 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
marcieldeg Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011 Mensagens: 1054 Localização: Vitória - ES
|
Enviada: Dom Ago 12, 2018 9:42 pm Assunto: WinHTTP - A conexão foi interrompida de modo anormal |
|
|
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 |
|
 |
marcieldeg Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011 Mensagens: 1054 Localização: Vitória - ES
|
Enviada: Dom Ago 19, 2018 3:20 pm Assunto: |
|
|
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 |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Ter Ago 21, 2018 2:01 pm Assunto: |
|
|
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 |
|
 |
marcieldeg Colaborador


Registrado: Terça-Feira, 5 de Abril de 2011 Mensagens: 1054 Localização: Vitória - ES
|
Enviada: Qua Ago 29, 2018 3:22 pm Assunto: |
|
|
Provavelmente a padrão do Windows. _________________ "Olha a interface da IDE! Será que ela é? Será que ela é? DELPHI!" |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Seg Set 03, 2018 1:27 pm Assunto: |
|
|
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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|