Вниз
Скачать: CL | DM;

Помогите с WinINet ом... :(   Найти похожие ветки 

 
DillerXX ©   (2006-10-20 23:58) [0]

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


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

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


 
isasa ©   (2006-10-23 16:30) [2]

А посмотреть подробности.
До использования (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.


 
seeker ©   (2006-10-23 16:52) [3]


> HttpQueryInfo(hHTTP, HTTP_QUERY_CONTENT_LENGTH, ...)

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


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

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

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


 
seeker ©   (2006-10-23 17:19) [5]

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:20) [6]

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

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


 
isasa ©   (2006-10-23 18:19) [7]

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

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);
...



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: -0.968 c
15-1173700587
Prohodil Mimo
2007-03-12 14:56
2007.04.08
TComboBox с двумя колонками.


15-1173557565
DVM
2007-03-10 23:12
2007.04.08
Полный список Win32 версий Windows. Все ли я перечислил?


15-1173715498
zdm
2007-03-12 19:04
2007.04.08
TDBF


2-1174382538
Malik
2007-03-20 12:22
2007.04.08
Вопрос про масштабирование StringGrid a для распечатки


3-1169124696
ildarkh
2007-01-18 15:51
2007.04.08
Обмен большими данными между Oracle и FireBird




   Наверх