Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с WinINet'ом... :( [D7, WinXP]


DillerXX ©   (2006-10-20 23:58:00) 

Как извесно ф-ция InternetQueryDataAvailable должна возвращать True при успехе, и False при неудаче. Но что делать если она постоянно возвращает false? В GetLastError лежит 997, что по МСДНу означает
ERROR_IO_PENDING
997 Overlapped I/O operation is in progress.
Что это может означать, где искать проблему?..
P.S. На всякий случай запостил в 2 конференции, всё же решить нужно как можно быстрее.


isasa   (2006-10-23 18:19:00) [1]

Не. :)
Учитывая ....

MSDN
...
Remarks
You can retrieve the following types of data from HttpQueryInfo:

Strings (default)
SYSTEMTIME (for dates)
DWORD (for STATUS_CODE, CONTENT_LENGTH, and so on, if HTTP_QUERY_FLAG_NUMBER has been used)

If your application requires that the data be returned as a data type other than a string, you must include the appropriate modifier with the attribute passed to dwInfoLevel.


можно проще


var
   i : longword;   // type DWORD = Longword;
   bLen, hInd : longword;  
...
 bLen:=4;
 hInd:=0;
 HttpQueryInfo(hHTTP, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, @i, bLen, hInd);
...


isasa   (2006-10-23 17:20:00) [2]

Поясню, что я имел ввиду. :)

При коде состояния 200(ну и там, чего-нибудь еще) просто тупо начать читать из потока InternetReadFile - ом, проверяя код возврата (BOOL) и lpdwNumberOfBytesRead


seeker   (2006-10-23 17:19:00) [3]

procedure GetResponseIntHeaderProp(hRequest:pointer; API_FLAG: dword; var FuncResult:dword);
var Index:dword;

function InternalHttpQueryInfoAsInt(hRequest: HINTERNET; dwInfoLevel: DWORD; var Buffer: dword;
                                    var lpdwIndex: DWORD): boolean;
var
 lpvBuffer:pchar;
 lpdwBufferLength: DWORD;          
begin
 lpdwBufferLength:=4;
 getMem(lpvBuffer, lpdwBufferLength);
 try
   result:=boolean(HttpQueryInfo(hRequest, dwInfoLevel, lpvBuffer, lpdwBufferLength, lpdwIndex));
   if result then
      buffer:=pdword(lpvBuffer)^;
 finally
   freeMem(lpvBuffer, lpdwBufferLength);
 end;
end;

begin
 Index:=0;
 if not InternalHttpQueryInfoAsInt(hRequest,API_FLAG or HTTP_QUERY_FLAG_NUMBER ,Funcresult,Index) then
     FuncResult:=0;
end;

Приблизительно так...


isasa   (2006-10-23 17:05:00) [4]

seeker ©   (23.10.06 16:52) [3]
HTTP_QUERY_CONTENT_LENGTH говорит о том, что запихнуть в те параметры, которые под ... :)

Судя по [0], автор сабжа с MSDN знаком. :)


seeker   (2006-10-23 16:52:00) [5]


> HttpQueryInfo(hHTTP, HTTP_QUERY_CONTENT_LENGTH, ...)

Ни очем не говорит...
важно что в тех параметрах которые под "...".


isasa   (2006-10-23 16:30:00) [6]

А посмотреть подробности.
До использования (InternetQueryDataAvailable) и чтения данных (InternetReadFile), но после посылки запроса (HttpSendRequest).

var i : longword;
...
 HttpSendRequest(hHTTP, nil, 0, nil, 0);
...
 HttpQueryInfo(hHTTP, HTTP_QUERY_STATUS_CODE or HTTP_QUERY_FLAG_NUMBER, @i, ...);
 //i - Код состояния HTTP (200 - Ok! ... 400 Error. Not found ...)  
 ...
 HttpQueryInfo(hHTTP, HTTP_QUERY_RAW_HEADERS_CRLF, ...);//все заголовки в буфер, разделенные CR/LF
...
 HttpQueryInfo(hHTTP, HTTP_QUERY_CONTENT_LENGTH, ...); //  Retrieves the size of the resource, in bytes.


Сергей М.   (2006-10-23 14:06:00) [7]

покажи код целиком..


Наверх

Титульная страница Поиск, карта сайта Написать письмо