请问一下,向web服务器用http传输协议,用post方法发送消息的一个流程是什么样的啊?谁有这方面完整的实例呢?
实现的功能:
    向web服务器发送一个请求,web服务器返回一个html

解决方案 »

  1.   

    我也不太会。但NET的处理起来方方便多了。
      

  2.   


    CInternetSession   session("");   
    CHttpConnection*   pServer   =   NULL;   pServer   =   session.GetHttpConnection("www.xxxx.com",80);   
    pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,"/login.php");   
      

  3.   

    这个很简单,给你一个函数吧。//****************************************************************************************//
    //函数 PostData
    //主要功能: Post方式向服务器传数据
    //参数列表: 
    // 1、strUrl:提交地址
    // 2、strPara:提交的参数
    // 3、strContent:返回的网页内容
    //返回值: 如果成功则返回true
    //备注: 
    //****************************************************************************************//
    bool PostData(CString strUrl, const CString &strPara, CString &strContent)
    {
    bool bRet = false;
    CString strServer, strObject, strHeader, strRet;
    unsigned short nPort;
    DWORD dwServiceType;
    if(!AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort))//不是有效有网络地址!
    return false; CInternetSession sess;//Create session
    CHttpFile* pFile = NULL;
    CHttpConnection *pServer = sess.GetHttpConnection(strServer, nPort); 
    if(pServer == NULL)//连接服务器失败!
    return false; pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT); 
    if(pFile == NULL)//找不到网络地址
    return false; pFile -> AddRequestHeaders("Content-Type: application/x-www-form-urlencoded"); 
    pFile -> AddRequestHeaders("Accept: */*"); 
    pFile -> SendRequest(NULL,0,(LPTSTR)(LPCTSTR)strPara, strPara.GetLength());  CString strSentence;
    DWORD dwStatus;
    DWORD dwBuffLen = sizeof(dwStatus);
    BOOL bSuccess = pFile->QueryInfo(
    HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER,
    &dwStatus, &dwBuffLen); if( bSuccess && dwStatus>=  200 && dwStatus<300) 
    {
    char buffer[2049];
    memset(buffer, 0, 2049);
    int nReadCount = 0;
    while((nReadCount = pFile->Read(buffer, 2048)) > 0)
    {
    strContent += buffer;
    memset(buffer, 0, 2049);
    }
    bRet = true;
    }
    else//错误
    bRet = false;
    pFile->Close();
    sess.Close();
    return bRet;
    }
      

  4.   

    在VC中WININET如何使用HTTP的POST方法2007-08-21 13:30SUMMARY 
         To properly simulate a Form submission using WinInet, you need to send a header that indicates the proper Content-Type. For Forms, the proper Content-Type header is: Content-Type: application/x-www-form-urlencoded 
         
         MORE INFORMATION 
         In many cases, the server does not respond appropriately if a Content-Type is not specified. For example, the Active Server Pages component of IIS 3.0 actually checks this header specifically for 'application/x-www-form- urlencoded' before adding form variables to the "Request.Form" object. This MIME/Content-Type indicates that the data of the request is a list of URL- encoded form variables. URL-encoding means that space character (ASCII 32) is encoded as '+', special character such '!' encoded in hexadecemal form as '%21'. 
         
         Here is a snippet of code that uses the MFC WinInet classes to simulate a Form POST request: 
         CString strHeaders = 
         _T("Content-Type: application/x-www-form-urlencoded"); 
         // URL-encoded form variables - 
         // name = "John Doe", userid = "hithere", other = "P&Q" 
         CString strFormData = _T("name=John+Doe&userid=hithere&other=P%26Q"); 
         
         CInternetSession session; 
         CHttpConnection* pConnection = 
         session.GetHttpConnection(_T("ServerNameHere")); 
         CHttpFile* pFile = 
         pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, 
         _T("FormActionHere")); 
         BOOL result = pFile->SendRequest(strHeaders, 
         (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength()); 
         
         
         Without MFC, the same code translates to straight SDK calls as follows: 
         static TCHAR hdrs[] = 
         _T("Content-Type: application/x-www-form-urlencoded"); 
         static TCHAR frmdata[] = 
         _T("name=John+Doe&userid=hithere&other=P%26Q"); 
         statuc TCHAR accept[] = 
         _T("Accept: */*"); 
         
         // for clarity, error-checking has been removed 
         HINTERNET hSession = InternetOpen("MyAgent", 
         INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); 
         HINTERNET hConnect = InternetConnect(hSession, _T("ServerNameHere"), 
         INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1); 
         HINTERNET hRequest = HttpOpenRequest(hConnect, "POST", 
         _T("FormActionHere"), NULL, NULL, accept, 0, 1); 
         HttpSendRequest(hRequest, hdrs, strlen(hdrs), frmdata, strlen(frmdata));