| Код | program DownloadLink;
uses windows, wininet, zlib;
{$R *.res}
var hI, hConnect, hFile: HInternet; HEADERS: String; L, ReadedSize: Cardinal; InBuf: PChar; OutBuf: Pointer; i,InBytes,OutBytes: integer; begin
Headers:='Accept: */*'#13#10+ 'Accept-Language: ru'#13#10+ 'Accept-Encoding: gzip, deflate'#13#10+ 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)'#13#10+ 'Host: www.google.com.ua'#13#10+ 'Connection: Keep-Alive'#13#10;
hI:=InternetOpen('Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', INTERNET_OPEN_TYPE_PRECONFIG , nil, nil, 0); hConnect:=InternetConnect(hI, 'www.google.com.ua', 80, nil, nil, INTERNET_SERVICE_HTTP, 0, 0); hFile:=HTTPOpenRequest(hConnect, 'GET', '/', HTTP_VERSION, nil, nil, INTERNET_FLAG_NO_COOKIES or INTERNET_FLAG_NO_AUTO_REDIRECT, 0); HTTPSendRequest(hFile, @HEADERS[1], Length(HEADERS), nil, 0);
GetMem(InBuf,65535);
i:=0; while True do begin InternetQueryDataAvailable(hFile, L, 0, 0); if L=0 then break; if NOT InternetReadFile(hFile, @InBuf[i], L, ReadedSize) then break; inc(i, ReadedSize); end; InBytes:=i;
InternetCloseHandle(hFile); InternetCloseHandle(hConnect); InternetCloseHandle(hI);
OutBuf:=nil; DeCompressBuf(InBuf,InBytes,0,OutBuf,OutBytes);
FreeMem(InBuf); end.
|
При DeCompressBuff вылетает с ошибкой "Exception EDecompressionError in module DownloadLink.exe at 00018A4C. error." При этом "Content-Encoding: gzip". Использую Delphi 6. Убрать 'Accept-Encoding: gzip, deflate' в запросе - не выход, нужно именно разжать данные. Как правильно разжать буфер (TSream использовать не желательно) используя zlib? Так же буду рад примеру разжатия используя urlmon (IDataFilter). Заранее спасибо. |