Форум: "Сети";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
ВнизПомогите с 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 вся ветка
Форум: "Сети";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.061 c