使用WinInet实现HTTP站点访问

废话不多说了,直接上代码

HTTP的GET方式代码

void sendGetRequest(LPCTSTR lpszURL)
{
    LPCTSTR lpszAgent = _T("WininetGet/0.1");

    HINTERNET hInternet = NULL;
    HINTERNET hConnect = NULL;
    HINTERNET hRequest = NULL;
    do 
    {
        CString strServer, strObject;
        DWORD dwServerType;
        INTERNET_PORT nPort;
        if (!AfxParseURL(lpszURL, dwServerType, strServer, strObject, nPort))
        {
            break;
        }
        hInternet = InternetOpen(lpszAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
        if (NULL==hInternet)
        {
            break;
        }

        LPCTSTR lpszUserName = NULL;
        LPCTSTR lpszPassword = NULL;
        DWORD dwConnectFlags = 0, dwConnectContext = 0;
        hConnect = InternetConnect(hInternet, strServer, nPort,
            lpszUserName, lpszPassword,
            INTERNET_SERVICE_HTTP,
            dwConnectFlags, dwConnectContext);
        if (NULL==hConnect)
        {
            break;
        }

        LPCTSTR lpszVerb = _T("GET");
        LPCTSTR lpszVersion = NULL;
        LPCTSTR lpszReferrer = NULL;
        LPCTSTR *lplpszAcceptTypes = NULL;  // 允许接受所有类型
        DWORD dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP |
            INTERNET_FLAG_KEEP_CONNECTION |
            INTERNET_FLAG_NO_AUTH |
            INTERNET_FLAG_NO_COOKIES |
            INTERNET_FLAG_NO_UI |
            INTERNET_FLAG_IGNORE_CERT_CN_INVALID |
            INTERNET_FLAG_RELOAD;
        DWORD dwOpenRequestContext = 0;
        hRequest = HttpOpenRequest(hConnect, lpszVerb, strObject, lpszVersion,
            lpszReferrer, lplpszAcceptTypes,
            dwOpenRequestFlags, dwOpenRequestContext);
        if (NULL==hRequest)
        {
            break;
        }
        
        BOOL bResult = HttpSendRequest(hRequest, NULL, 0, NULL, 0);
        if (!bResult)
        {
            break;
        }

        // 获取 HTTP应答头部信息
        TCHAR szBuff[TRANSFER_SIZE];
        DWORD dwReadSize = TRANSFER_SIZE;
        bResult = HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS, szBuff, &dwReadSize, NULL);
        if (!bResult)
        {
            break;
        }
        szBuff[dwReadSize] = _T('\0');
        // 获取 HTTP应答包体信息
        DWORD dwByteAvailable = 0;
        bResult = InternetQueryDataAvailable(hRequest, &dwByteAvailable, 0, 0);
        if (!bResult)
        {
            break;
        }
        char szBody[TRANSFER_SIZE];
        DWORD dwBytesRead = 0;
        bResult = InternetReadFile(hRequest, szBody, dwByteAvailable, &dwBytesRead);
        if (!bResult)
        {
            break;
        }
        szBody[dwBytesRead] = '\0';
        TRACE(szBuff);
    } while (false);
    if (NULL != hRequest)
    {
        InternetCloseHandle(hRequest);
    }
    if (NULL!=hConnect)
    {
        InternetCloseHandle(hConnect);
    }
    if (NULL != hInternet)
    {
        InternetCloseHandle(hInternet);
    }
}

转载于:https://www.cnblogs.com/sanghg/p/5475006.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值