Newsgroups : Borland : borland.public.delphi.internet.winsock : 2007 Mar : Wininet.dll & HTTPQueryInfo

www.cryer.info
Managed Newsgroup Archive

Wininet.dll & HTTPQueryInfo

Subject:Wininet.dll & HTTPQueryInfo
Posted by:"MikeR" (nf4lnospam@pobox.com)
Date:Fri, 9 Mar 2007 10:08:51

Using Wininet.dll, I can download a file using the following URL and code.
I'd like to get the filesize using HTTPQueryInfo so I can implement a progress
bar. HTTPQueryInfo returns ERROR_HTTP_HEADER_NOT_FOUND.

I believe the file is created on the fly. The URL up to the filename would be
the same, and the filename could be the same for any user. I assume (because the
server owner won't communicate) that the directory is changed when the file is
requested. Any hope of getting this to work?
Mike

'https://p1k.domain.org/xyzuser/xyzreport.adi?login=myID&password=mypw&par_query=1&par_withown=yes&par_detail=yes/xyzreport.adi'

NetHandle := InternetOpen('Delphi 7.x',INTERNET_OPEN_TYPE_PRECONFIG, nil,nil,0);
   if Assigned(NetHandle) then
   begin
     UrlHandle :=
InternetOpenUrl(NetHandle,PChar(Url),nil,0,INTERNET_FLAG_RELOAD, 0);
     if Assigned(UrlHandle) then
     begin
      dummy := 0;
      bufLen := Length(infoBuffer);
     if
HttpQueryInfo(UrlHandle,HTTP_QUERY_CONTENT_LENGTH,@infoBuffer[0],bufLen,dummy) then
     reply := infobuffer
    else
     CheckInetResult(false);
     FileHandle := CreateFile(PChar(FileName), GENERIC_WRITE, FILE_SHARE_WRITE,
           nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
     if (FileHandle = INVALID_HANDLE_VALUE) then
       RaiseLastOSError;
     Buffer := StrAlloc(ChunkSize);
     repeat
       FillChar(Buffer^, ChunkSize, 0);
       InternetReadFile(URLhandle, Buffer, ChunkSize, BytesRead);
       Win32Check(WriteFile(FileHandle, Buffer^, BytesRead, BytesWritten, nil));
       if BytesRead > 0 then
         result := true;
     until BytesRead = 0;
     InternetCloseHandle(UrlHandle);
     StrDispose(Buffer);
     CloseHandle(FileHandle);
   end;

Replies:

www.cryer.info
Managed Newsgroup Archive