| RedFern.89 |
04.02.2010 16:57 |
вот тебе пример функции из моего модуля. Думаю разберешься, там все еть.
Код:
function TApiGetHTTP.Get(const AURL: string; AResponseContent: TStream): boolean;
const BufferSize = 1024;
var
Buffer : array[0..BufferSize] of Byte;
BufferLen: DWORD;
Header : string;
hSession, hConnect, hRequest : hInternet;
FSize : Int64;
begin
{ Подготавливаем заголовок }
If FUserAgent = '' Then FUserAgent := 'Delphi/7.0';
If FAccept <> '' Then Header := Header + 'Accept: ' + FAccept + #10;
If FAcceptEncoding <> '' Then Header := Header + 'Accept-Encoding: ' + FAcceptEncoding + #10;
If FConnection <> '' Then Header := Header + 'Connection: ' + FConnection + #10;
If FContentType <> '' Then Header := Header + 'Content-Type: ' + FContentType + #10;
If FKeepAlive <> '' Then Header := Header + 'Keep-Alive: ' + FKeepAlive + #10;
If FAcceptCharset <> '' Then Header := Header + 'Accept-Charset: ' + FAcceptCharset + #10;
If (FRangeStart <> '') and (FRangeEnd <> '') Then
begin
Header := Header + 'Range: bytes=' + FRangeStart + '-' + FRangeEnd;
end;
// Если есть куки, то приделываем их к заголовку
If FCookie <> '' Then Header := Header + 'Cookie: ' + FCookie;
hSession := InternetOpen(PChar(FUserAgent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
hConnect := InternetConnect(hSession, pchar(GetHost(AURL)), 80, nil, nil,
INTERNET_SERVICE_HTTP, 0, 0);
hRequest := HttpOpenRequest(hConnect, PChar('GET'), PChar(Copy(AURL, Pos('.ru', AURL) +4, Length(AURL))), 'HTTP/1.1',
nil, nil, 0, 0);
HttpSendRequest(hRequest, PChar(Header), Length(Header), nil,
0);
FSize := GetUrlInfo(HTTP_QUERY_CONTENT_LENGTH, AURL);
TriggerOnWorkBegin(FSize);
repeat
Result := InternetReadFile(hRequest, @Buffer,
SizeOf(Buffer), BufferLen);
AResponseContent.Write(Buffer, SizeOf(Buffer));
TriggerOnWork(AResponseContent.Position);
until BufferLen = 0;
InternetCloseHandle(hRequest);
InternetCloseHandle(hSession);
TriggerOnWorkEnd(nil);
end;
|