勇芳软件工作室.汉化:  WinHTTP Reference > WinHTTP Functions >

WinHttpQueryDataAvailable

Previous pageReturn to chapter overviewNext page

描述

 

WinHttpQueryDataAvailable函数返回可用WinHttpReadData读取的数据量(以字节为单位)。

 

C / C ++语法

 

BOOL WinHttpQueryDataAvailable(

HINTERNET hRequest,

LPDWORD lpdwNumberOfBytesAvailable

);

 

PowerBASIC 语法

 

FUNCTION WinHttpQueryDataAvailable ( _

BYVAL hRequest AS DWORD, _

BYREF lpdwNumberOfBytesAvailable AS DWORD _

) AS LONG

 

参数

 

hRequest

 

[in]WinHttpOpenRequest返回的有效HINTERNET句柄。WinHttpReceiveResponse必须已被调用此句柄,并在调用WinHttpQueryDataAvailable之前完成。

 

lpdwNumberOfBytesAvailable

 

[out, optional]指向无符号长整型变量的指针,该变量接收可用字节数。当在异步模式下使用WinHTTP时,始终将此参数设置为NULL并在回调函数中检索数据;不这样做可能会导致内存故障。

 

返回值

 

如果函数成功,则返回TRUE,否则返回FALSE。要获取扩展错误数据,请调用GetLastError.返回的错误代码有:

 

错误代码

描述

ERROR_WINHTTP_CONNECTION_ERROR

与服务器的连接已重置或终止,或遇到不兼容的SSL协议。例如,WinHTTP版本5.1不支持SSL2,除非客户端专门启用它。

ERROR_WINHTTP_INCORRECT_HANDLE_STATE

所请求的操作不能完成,因为提供的句柄不在正确的状态。

ERROR_WINHTTP_INCORRECT_HANDLE_TYPE

提供的手柄类型对于此操作是不正确的。

ERROR_WINHTTP_INTERNAL_ERROR

发生内部错误。

ERROR_WINHTTP_OPERATION_CANCELLED

操作被取消,通常是因为在操作完成之前,请求的操作被关闭。

ERROR_WINHTTP_TIMEOUT

请求已超时。

ERROR_NOT_ENOUGH_MEMORY

没有足够的内存来完成请求的操作。(Windows错误代码)

 

备注

 

即使在异步模式下使用WinHTTP(即,在WinHttpOpen中设置了WINHTTP_FLAG_ASYNC)时,此函数可以同步或异步操作。如果返回FALSE,则失败,您可以调用GetLastError获取扩展错误信息。如果返回TRUE,请使用WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE完成来确定此函数是否成功和参数的值。WINHTTP_CALLBACK_STATUS_REQUEST_ERROR完成表示操作异步完成但失败。

 

警告当以异步模式使用WinHTTP时,始终将lpdwNumberOfBytesAvailable参数设置为NULL,并检索回调函数中可用的字节;否则可能会发生内存故障。

 

此函数返回随后调用WinHttpReadData立即读取的数据字节数。如果没有数据可用,并且文件的结尾尚未到达,则会发生两件事之一。如果会话是同步的,请求等待,直到数据可用。如果会话是异步的,该函数返回TRUE,当数据可用时,使用WINHTTP_STATUS_CALLBACK_DATA_AVAILABLE调用回调函数,并通过调用WinHttpReadData指示可立即读取的字节数。

 

在通过调用WinHttpQueryDataAvailable指示的所有可用数据都被读取之前,不会重新计算剩余的数据量。

 

使用返回值WinHttpReadData来确定响应是否已被完全读取。

 

重要不要使用WinHttpQueryDataAvailable的返回值来确定是否已经达到响应的结束,因为并非所有服务器都正确终止响应,并且不正确终止的响应导致WinHttpQueryDataAvailable预期更多数据。

 

对于由WinHttpOpenRequest函数创建并由WinHttpSendRequest发送的HINTERNET句柄,必须在WinHttpQueryDataAvailable之前对句柄进行调用WinHttpReceiveResponse.

 

如果WinHttpSetStatusCallback已经安装了状态回调函数,那么在WinHttpSetStatusCallbackdwNotificationFlags参数中设置的以下通知中的那些通知表示检查可用数据的进度:

 

WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE

WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED

WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE