看流星社区

 找回密码
 注册账号
查看: 1978|回复: 0

VC++的UNICODE工程和多字节字符集的HTTP请求

[复制链接]

该用户从未签到

发表于 2015-4-4 20:38:34 | 显示全部楼层 |阅读模式
CString CServerSession::httpGetRequest(CString url)
{
        CInternetSession m_InetSession;
        CString strHtml;
        try{
                CHttpFile* pFile =(CHttpFile*)m_InetSession.OpenURL(url);
                if (pFile!=NULL)
                {
                        DWORD statusCode;  
                        pFile->QueryInfoStatusCode(statusCode);  
                        if (statusCode==HTTP_STATUS_OK)  
                        {
                                CString strLine;
                                while (pFile->ReadString(strLine)>0)
                                        strHtml +=  strLine;
                        }
                }
                m_InetSession.Close();
                pFile->Close();
                delete pFile;
        }
        catch (CInternetException* e){
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
                AfxMessageBox(info);
        }
        catch (CMemoryException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
                AfxMessageBox(info);
        }
        catch (CFileException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
                AfxMessageBox(info);
        }
        catch (CException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
                AfxMessageBox(info);
        }
        return strHtml;
}

CString CServerSession::httpPostRequest(CString requestData,CString pageUrl)
{
        CInternetSession m_InetSession;     //设置不缓冲
        CHttpConnection* pServer = NULL;
        CHttpFile* pFile = NULL;
        CString strHtml;
        //POST过去的数据requestData
        try{
                INTERNET_PORT nPort; //端口
                nPort=80;
                pServer = m_InetSession.GetHttpConnection("127.0.0.1", nPort);
                pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,pageUrl);
                pFile->AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");
                pFile->AddRequestHeaders("Accept: */*");
                pFile->SendRequestEx(requestData.GetLength());
                pFile->WriteString(requestData);
                pFile->EndRequest();
                DWORD dwRet;
                pFile->QueryInfoStatusCode(dwRet);
                if (dwRet == HTTP_STATUS_OK){
                        CString strLine;
                        while (pFile->ReadString(strLine)>0)
                                strHtml +=  strLine;
                }
                m_InetSession.Close();
                pFile->Close();
                pServer->Close();
                delete pFile;
                delete pServer;
        }
        catch (CInternetException* e){
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
                AfxMessageBox(info);
        }
        catch (CMemoryException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
                AfxMessageBox(info);
        }
        catch (CFileException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
                AfxMessageBox(info);
        }
        catch (CException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
                AfxMessageBox(info);
        }
        return strHtml;
}


以上是字节字符集的

下面是UNICODE工程的


CString CServerSession::httpGetRequest(CString url)
{
        CInternetSession m_InetSession;
        CString strHtml;
        try{
                CHttpFile* pFile =(CHttpFile*)m_InetSession.OpenURL(url);
                if (pFile!=NULL)
                {
                        DWORD statusCode;  
                        pFile->QueryInfoStatusCode(statusCode);  
                        if (statusCode==HTTP_STATUS_OK)  
                        {
                                TCHAR buf[1024]= {0};
                                char tmp[2048] = {0};
                                while(pFile->ReadString(buf, 1024))
                                {
                                        for(int i=0, j=0; i<lstrlen(buf); i++, j+=2)
                                        {
                                                tmp[j] = LOBYTE(buf[i]);//取字的低字节
                                                tmp[j+1] = HIBYTE(buf[i]);//取字的高字节
                                        }
                                        CString ss(tmp);
                                        strHtml+=ss;
                                }
                        }
                }
                m_InetSession.Close();
                pFile->Close();
                delete pFile;
        }
        catch (CInternetException* e){
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
        }
        catch (CMemoryException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
        }
        catch (CFileException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
        }
        catch (CException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
        }
        return strHtml;
}

CString CServerSession::httpPostRequest(char* requestData,CString pageUrl)
{
        CInternetSession m_InetSession;     //设置不缓冲
        CHttpConnection* pServer = NULL;
        CHttpFile* pFile = NULL;
        CString strHtml;
        //POST过去的数据requestData
        try{
                INTERNET_PORT nPort; //端口
                nPort=80;
                pServer = m_InetSession.GetHttpConnection(SERVER_URL, nPort);
                pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,pageUrl);
                pFile -> AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));
                pFile -> AddRequestHeaders(_T("Accept: */*"));
                pFile->SendRequest(NULL,NULL,requestData,(DWORD)strlen(requestData));
                DWORD dwRet;
                pFile->QueryInfoStatusCode(dwRet);
                if (dwRet == HTTP_STATUS_OK){
                        TCHAR buf[1024]= {0};
                        char tmp[2048] = {0};
                        while(pFile->ReadString(buf, 1024))
                        {
                                for(int i=0, j=0; i<lstrlen(buf); i++, j+=2)
                                {
                                        tmp[j] = LOBYTE(buf[i]);//取字的低字节
                                        tmp[j+1] = HIBYTE(buf[i]);//取字的高字节
                                }
                                strHtml+=UTF8ToUnicode(tmp);
                        }
                }
                m_InetSession.Close();
                pFile->Close();
                pServer->Close();
                delete pFile;
                delete pServer;
        }
        catch (CInternetException* e){
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
        }
        catch (CMemoryException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
        }
        catch (CFileException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
        }
        catch (CException* e)
        {
                TCHAR info[1024] = {0};
                e->GetErrorMessage(info,1024);
        }
        return strHtml;
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-24 07:46

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表