dnvThai
dnvThai

Reputation: 123

WinHttpReceiveResponse function return an error

Can someone tell me what is wrong in the code below?

void Mess(LPCWSTR Str)
{
    MessageBox(0, Str, L"Hi", 0);
}

int main()
{
    // HttpOpen
    HINTERNET hHttp = NULL;
    LPCWSTR lpcwAgent = L"UserAgent";
    DWORD dwAccessType = WINHTTP_ACCESS_TYPE_NO_PROXY;
    LPCWSTR lpcwProxyName = WINHTTP_NO_PROXY_NAME;
    LPCWSTR lpcwProxyByPass = WINHTTP_NO_PROXY_BYPASS;
    DWORD dwFlag = 0;

    // HttpConnect
    HINTERNET hConnect = NULL;
    LPCWSTR lpcwServerName = L"localhost";
    INTERNET_PORT Port = INTERNET_DEFAULT_HTTP_PORT;
    DWORD dwReserved = 0; //must be 0

    // HttpOpenRequest
    HINTERNET hRequest = NULL;
    LPCWSTR lpcwVerb = L"GET"; // or POST, PUT
    LPCWSTR lpcwObjectName  = L"/index.php";
    LPCWSTR lpcwVersion = NULL; //NULL == HTTP/1.1
    LPCWSTR lpcwReferrer = WINHTTP_NO_REFERER; // It mean there's no referrer
    LPCWSTR* plpcwAccept = WINHTTP_DEFAULT_ACCEPT_TYPES; // For more information: Media types (http://www.iana.org/assi gnments/medi a-types)
    DWORD dwRequestFlag = 0; 

    // HttpSendRequest
    bool bSendRequest = false;
    LPCWSTR lpcwHeaders = WINHTTP_NO_ADDITIONAL_HEADERS; // Additional headers to append to the request
    DWORD dwHeaderLength = 0;
    LPVOID lpvOptional = WINHTTP_NO_REQUEST_DATA; //The data which is used for POST or PUT
    DWORD dwOptionalLength = 0;
    DWORD dwTotalLength = 0;
    DWORD_PTR pdwContext = NULL;

    // HttpReceiveResponse
    bool bReceiveResponse = false;
    HINTERNET _hRequest = NULL; // Will be set again after HttpOpenRequest are completed
    LPVOID lpvReserved = NULL;

    hHttp = WinHttpOpen(lpcwAgent, dwAccessType, lpcwProxyName, lpcwProxyByPass, dwFlag);
    if ( hHttp == NULL )
    {
        Mess(L"Unable to open a connection");
    }
    else
    {
        hConnect = WinHttpConnect(hHttp, lpcwServerName, Port, dwReserved);
        if ( hConnect == NULL )
        {
            Mess(L"Unable to Connecting");
        }
        else
        {
            hRequest = WinHttpOpenRequest(hConnect, lpcwVerb, lpcwObjectName, lpcwVersion, lpcwReferrer, plpcwAccept, dwRequestFlag);
            if ( hRequest == NULL )
            {
                Mess(L"Unable to open the request");
            }
            else
            {
                bSendRequest = WinHttpSendRequest(hRequest, lpcwHeaders, dwHeaderLength, lpvOptional, dwOptionalLength, dwTotalLength, pdwContext);
                if ( !bSendRequest )
                {
                    Mess(L"Failed to send the request");
                }
                else
                {
                    bReceiveResponse = WinHttpReceiveResponse(_hRequest, lpvReserved);
                    if ( !bReceiveResponse )
                    {
                                        Mess(L"Unable to receive the response");
                    }
                    else
                    {
                        Mess(L"Ok");
                    }
                }
            }
        }
    }

    if ( hRequest != NULL )
        WinHttpCloseHandle(hRequest);

    if ( hConnect != NULL )
        WinHttpCloseHandle(hConnect);

    if ( hHttp != NULL )
        WinHttpCloseHandle(hHttp);

    return 0;
}

I don't understand WINHTTP much but I'm trying.

When I excute the program, I get

Unable to receive the response

then, I use GetLastError() to get the code of the error that always is 6. I can't find anything about code 6?

Upvotes: 0

Views: 1648

Answers (1)

Roman Ryltsov
Roman Ryltsov

Reputation: 69632

Error code 6 is ERROR_INVALID_HANDLE "The handle is invalid."

The problem is that you use wrong variable for the request handle: _hRequest whereas you were to use hRequest instead.

WinHttpReceiveResponse(_hRequest, ...

Upvotes: 1

Related Questions