c - 为什么 WinHttpQueryDataAvailable 说 0 个字节可用?

标签 c windows winapi http

同步操作。 GetLastError = 0,WinHttpQueryDataAvailable 本身返回 TRUE(即 OK),但要读取的字节数 = 0

知道这意味着什么吗?它通常工作正常(从相机读取 JPEG 流),但偶尔会卡在这里(提示代码重新连接)。

根据 MSDN,WinHttpQueryDataAvailable 不应返回:“如果 session 是同步的,则请求将等待,直到数据可用。”

代码摘录如下:

g_HSession = WinHttpOpen( L"Jet", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0 );

ResultsOk = WinHttpSendRequest( 
    hRequest,
    WINHTTP_NO_ADDITIONAL_HEADERS,
    0, WINHTTP_NO_REQUEST_DATA, 0, 
    0, 0);

// End the request.
if (ResultsOk)
{
    ResultsOk = WinHttpReceiveResponse( hRequest, NULL );

    DWORD BytesToRead = 0;

    if (WinHttpQueryDataAvailable( hRequest, &BytesToRead ))
    {
        if (BytesToRead) // THIS IS SOMETIMES 0 - seems wrong to me
        {
            if (WinHttpReadData( hRequest, pReadPos, min(BytesToRead, (unsigned)SizeRemaining), &NumRead ))
            {
                ...etc!

最佳答案

底层HTTP响应已成功接收,但为空(即零长度响应)或所有数据已被读取并关闭。 WinHttpQueryDataAvailable 通过返回 TRUE 来表明这一点,仍然显示可用数据为零。

想想:

HTTP/1.0 200 OK
Content-Length: 0

关于c - 为什么 WinHttpQueryDataAvailable 说 0 个字节可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8214909/

相关文章:

c++ - 可移植可执行文件是否可以在代码段中直接绝对引用外部库,而不是通过 IAT?

c++ - IOCP:如果操作立即错误返回,我还能收到完成通知吗?

c - 显示当前正在执行的 C 代码行

c - 为什么 DetourFindFunction() 找不到函数的地址?

c - valgrind 将哪些所有 C 操作视为 'malloc' 和 'free' ?

c# - 选择字符串的特定部分 C#

java - Red5 无法开始分发

c - 在C中乘以整数的char数组

windows - 通过命令提示符打开最小化的程序

c# - 使用pyHook获取鼠标双击