描述
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已经安装了状态回调函数,那么在WinHttpSetStatusCallback的dwNotificationFlags参数中设置的以下通知中的那些通知表示检查可用数据的进度:
WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
WINHTTP_CALLBACK_STATUS_DATA_AVAILABLE