通过Post方式访问Web页面

来源:互联网 发布:软件安装找不到源文件 编辑:程序博客网 时间:2024/04/29 20:36

总有些人问我关于通过Post方式向Page页提交参数的方法,下面我写了一个函数,供一些初学者参考。

//****************************************************************************************//
//函数 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;
}

原创粉丝点击