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

来源:互联网 发布:python获取期货行情 编辑:程序博客网 时间:2024/05/14 22:49
[cpp] view plain copy
  1. CString CServerSession::httpGetRequest(CString url)  
  2. {  
  3.     CInternetSession m_InetSession;  
  4.     CString strHtml;  
  5.     try{  
  6.         CHttpFile* pFile =(CHttpFile*)m_InetSession.OpenURL(url);  
  7.         if (pFile!=NULL)  
  8.         {  
  9.             DWORD statusCode;    
  10.             pFile->QueryInfoStatusCode(statusCode);    
  11.             if (statusCode==HTTP_STATUS_OK)    
  12.             {   
  13.                 CString strLine;  
  14.                 while (pFile->ReadString(strLine)>0)  
  15.                     strHtml +=  strLine;  
  16.             }  
  17.         }  
  18.         m_InetSession.Close();  
  19.         pFile->Close();  
  20.         delete pFile;  
  21.     }  
  22.     catch (CInternetException* e){  
  23.         TCHAR info[1024] = {0};  
  24.         e->GetErrorMessage(info,1024);  
  25.         AfxMessageBox(info);  
  26.     }  
  27.     catch (CMemoryException* e)  
  28.     {  
  29.         TCHAR info[1024] = {0};  
  30.         e->GetErrorMessage(info,1024);  
  31.         AfxMessageBox(info);  
  32.     }  
  33.     catch (CFileException* e)  
  34.     {  
  35.         TCHAR info[1024] = {0};  
  36.         e->GetErrorMessage(info,1024);  
  37.         AfxMessageBox(info);  
  38.     }  
  39.     catch (CException* e)  
  40.     {  
  41.         TCHAR info[1024] = {0};  
  42.         e->GetErrorMessage(info,1024);  
  43.         AfxMessageBox(info);  
  44.     }  
  45.     return strHtml;  
  46. }  
  47.   
  48. CString CServerSession::httpPostRequest(CString requestData,CString pageUrl)  
  49. {  
  50.     CInternetSession m_InetSession;     //设置不缓冲  
  51.     CHttpConnection* pServer = NULL;  
  52.     CHttpFile* pFile = NULL;  
  53.     CString strHtml;  
  54.     //POST过去的数据requestData  
  55.     try{  
  56.         INTERNET_PORT nPort; //端口  
  57.         nPort=80;  
  58.         pServer = m_InetSession.GetHttpConnection("127.0.0.1", nPort);  
  59.         pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,pageUrl);  
  60.         pFile->AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");  
  61.         pFile->AddRequestHeaders("Accept: */*");  
  62.         pFile->SendRequestEx(requestData.GetLength());  
  63.         pFile->WriteString(requestData);  
  64.         pFile->EndRequest();  
  65.         DWORD dwRet;  
  66.         pFile->QueryInfoStatusCode(dwRet);  
  67.         if (dwRet == HTTP_STATUS_OK){  
  68.             CString strLine;  
  69.             while (pFile->ReadString(strLine)>0)  
  70.                 strHtml +=  strLine;  
  71.         }  
  72.         m_InetSession.Close();  
  73.         pFile->Close();  
  74.         pServer->Close();  
  75.         delete pFile;  
  76.         delete pServer;  
  77.     }  
  78.     catch (CInternetException* e){  
  79.         TCHAR info[1024] = {0};  
  80.         e->GetErrorMessage(info,1024);  
  81.         AfxMessageBox(info);  
  82.     }  
  83.     catch (CMemoryException* e)  
  84.     {  
  85.         TCHAR info[1024] = {0};  
  86.         e->GetErrorMessage(info,1024);  
  87.         AfxMessageBox(info);  
  88.     }  
  89.     catch (CFileException* e)  
  90.     {  
  91.         TCHAR info[1024] = {0};  
  92.         e->GetErrorMessage(info,1024);  
  93.         AfxMessageBox(info);  
  94.     }  
  95.     catch (CException* e)  
  96.     {  
  97.         TCHAR info[1024] = {0};  
  98.         e->GetErrorMessage(info,1024);  
  99.         AfxMessageBox(info);  
  100.     }  
  101.     return strHtml;  
  102. }  

以上是字节字符集的


下面是UNICODE工程的

[cpp] view plain copy
  1. CString CServerSession::httpGetRequest(CString url)  
  2. {  
  3.     CInternetSession m_InetSession;  
  4.     CString strHtml;  
  5.     try{  
  6.         CHttpFile* pFile =(CHttpFile*)m_InetSession.OpenURL(url);  
  7.         if (pFile!=NULL)  
  8.         {  
  9.             DWORD statusCode;    
  10.             pFile->QueryInfoStatusCode(statusCode);    
  11.             if (statusCode==HTTP_STATUS_OK)    
  12.             {   
  13.                 TCHAR buf[1024]= {0};  
  14.                 char tmp[2048] = {0};  
  15.                 while(pFile->ReadString(buf, 1024))   
  16.                 {  
  17.                     for(int i=0, j=0; i<lstrlen(buf); i++, j+=2)  
  18.                     {  
  19.                         tmp[j] = LOBYTE(buf[i]);//取字的低字节  
  20.                         tmp[j+1] = HIBYTE(buf[i]);//取字的高字节  
  21.                     }  
  22.                     CString ss(tmp);  
  23.                     strHtml+=ss;  
  24.                 }  
  25.             }  
  26.         }  
  27.         m_InetSession.Close();  
  28.         pFile->Close();  
  29.         delete pFile;  
  30.     }  
  31.     catch (CInternetException* e){  
  32.         TCHAR info[1024] = {0};  
  33.         e->GetErrorMessage(info,1024);  
  34.     }  
  35.     catch (CMemoryException* e)  
  36.     {  
  37.         TCHAR info[1024] = {0};  
  38.         e->GetErrorMessage(info,1024);  
  39.     }  
  40.     catch (CFileException* e)  
  41.     {  
  42.         TCHAR info[1024] = {0};  
  43.         e->GetErrorMessage(info,1024);  
  44.     }  
  45.     catch (CException* e)  
  46.     {  
  47.         TCHAR info[1024] = {0};  
  48.         e->GetErrorMessage(info,1024);  
  49.     }  
  50.     return strHtml;  
  51. }  
  52.   
  53. CString CServerSession::httpPostRequest(char* requestData,CString pageUrl)  
  54. {  
  55.     CInternetSession m_InetSession;     //设置不缓冲  
  56.     CHttpConnection* pServer = NULL;  
  57.     CHttpFile* pFile = NULL;  
  58.     CString strHtml;  
  59.     //POST过去的数据requestData  
  60.     try{  
  61.         INTERNET_PORT nPort; //端口  
  62.         nPort=80;  
  63.         pServer = m_InetSession.GetHttpConnection(SERVER_URL, nPort);  
  64.         pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,pageUrl);  
  65.         pFile -> AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));   
  66.         pFile -> AddRequestHeaders(_T("Accept: */*"));  
  67.         pFile->SendRequest(NULL,NULL,requestData,(DWORD)strlen(requestData));  
  68.         DWORD dwRet;  
  69.         pFile->QueryInfoStatusCode(dwRet);  
  70.         if (dwRet == HTTP_STATUS_OK){  
  71.             TCHAR buf[1024]= {0};  
  72.             char tmp[2048] = {0};  
  73.             while(pFile->ReadString(buf, 1024))   
  74.             {  
  75.                 for(int i=0, j=0; i<lstrlen(buf); i++, j+=2)  
  76.                 {  
  77.                     tmp[j] = LOBYTE(buf[i]);//取字的低字节  
  78.                     tmp[j+1] = HIBYTE(buf[i]);//取字的高字节  
  79.                 }  
  80.                 strHtml+=UTF8ToUnicode(tmp);  
  81.             }  
  82.         }  
  83.         m_InetSession.Close();  
  84.         pFile->Close();  
  85.         pServer->Close();  
  86.         delete pFile;  
  87.         delete pServer;  
  88.     }  
  89.     catch (CInternetException* e){  
  90.         TCHAR info[1024] = {0};  
  91.         e->GetErrorMessage(info,1024);  
  92.     }  
  93.     catch (CMemoryException* e)  
  94.     {  
  95.         TCHAR info[1024] = {0};  
  96.         e->GetErrorMessage(info,1024);  
  97.     }  
  98.     catch (CFileException* e)  
  99.     {  
  100.         TCHAR info[1024] = {0};  
  101.         e->GetErrorMessage(info,1024);  
  102.     }  
  103.     catch (CException* e)  
  104.     {  
  105.         TCHAR info[1024] = {0};  
  106.         e->GetErrorMessage(info,1024);  
  107.     }  
  108.     return strHtml;  
  109. }  

0 0