function
LoadHtml(fURL :
WideString
):
AnsiString
;
var
hInternet :
pointer
;
hConnect :
pointer
;
hRequest :
pointer
;
Size :
cardinal
;
B :
boolean
;
Buff :
ANSIString
;
ReadedSize :
cardinal
;
I, L :
cardinal
;
function
OpenInternet(Name:
WideString
):
pointer
;
begin
result := InternetOpenW(@Name[
1
], INTERNET_OPEN_TYPE_PRECONFIG,
nil
,
nil
,
0
);
end
;
function
Connect(hInternet :
pointer
):
pointer
;
var
SiteURL:
String
;
begin
result :=
nil
;
SiteURL := ADExtractUrlHostName(fURL);
if
hInternet =
nil
then
exit;
result := InternetConnectW(hInternet, @SiteURL[
1
],
INTERNET_DEFAULT_HTTP_PORT,
'anonymous'
,
nil
, INTERNET_SERVICE_HTTP,
0
,
0
);
end
;
function
NewRequest(fURL :
WideString
; hConnect:
pointer
):
pointer
;
begin
result :=
nil
;
if
hConnect =
nil
then
exit;
result := HTTPopenRequestW(hConnect,
nil
, @fURL[
1
],
nil
,
nil
,
nil
, INTERNET_FLAG_PRAGMA_NOCACHE
or
INTERNET_FLAG_RELOAD,
0
);
end
;
function
SendRequest(hRequest:
pointer
):
boolean
;
begin
result :=
false
;
if
hRequest =
nil
then
exit;
result := HTTPsendRequestW(hRequest,
nil
,
0
,
nil
,
0
);
end
;
function
DataAvailable(hRequest:
pointer
; out Size :
cardinal
):
boolean
;
begin
result := wininet
.
InternetQueryDataAvailable(hRequest, Size,
0
,
0
);
end
;
function
SizeQuery(hRequest:
pointer
; out Size :
cardinal
):
boolean
;
var
RSize,rv :
cardinal
;
p :
pointer
;
begin
RSize :=
4
;
result := HttpQueryInfoW(hRequest,
HTTP_QUERY_CONTENT_LENGTH
or
HTTP_QUERY_FLAG_NUMBER,
@Size, RSize, rv);
if
NOT
result
then
Size :=
0
;
end
;
begin
result :=
''
;
hInternet := OpenInternet(
'ADworldMiniDownloader'
);
hConnect := Connect(hInternet);
hRequest := NewRequest(ADExtractUrlFilePath(fURL), hConnect);
if
NOT
SendRequest(hRequest)
then
begin
if
hRequest <>
nil
then
InternetCloseHandle(hRequest);
if
hConnect <>
nil
then
InternetCloseHandle(hConnect);
if
hInternet <>
nil
then
InternetCloseHandle(hInternet);
exit;
end
;
SizeQuery(hRequest, Size);
inc(Size);
SetLength(Buff, Size);
B :=
false
;
I :=
1
;
while
true
do
begin
DataAvailable(hRequest, L);
if
L =
0
then
break;
if
(I + L) > Size
then
SetLength(Buff, I + L);
B := InternetReadFile(hRequest, @Buff[i], L, ReadedSize);
if
not
B
then
break;
inc(I, ReadedSize);
end
;
if
hRequest <>
nil
then
InternetCloseHandle(hRequest);
if
hConnect <>
nil
then
InternetCloseHandle(hConnect);
if
hInternet <>
nil
then
InternetCloseHandle(hInternet);
Result := Buff;
end
;