C++ POST方式访问网页

用C++打开网页时,有两种方式,一种是get方式,另一种为post方式。get方式为一般常用的方式,我们在地址栏中键入网址打开网站就属于get方式。而post方式则比较麻烦,如下函数实现了用post方式访问网页。


bool PostContent(CString strUrl, const CString &strPara, CString &strContent, CString &strDescript)//第一个参数为URL头
{                         //第二个参数为要post表单的内容
    try{                       //第三个参数用于保存页面返回的信息
                         //第四个参数用于记录日志
        strDescript = "提交成功完成!";
        bool bRet = false;
        CString strServer, strObject, strHeader, strRet;
        unsigned short nPort;
        DWORD dwServiceType;
        if(!AfxParseURL(strUrl, dwServiceType, strServer, strObject, nPort))
        {
            strDescript = strUrl + "不是有效有网络地址!";
            return false;
        }
        CInternetSession sess;//Create session

        CHttpFile* pFile;
        //
        CHttpConnection *pServer = sess.GetHttpConnection(strServer, nPort);
        if(pServer == NULL)
        {
            strDescript = "对不起,连接服务器失败!";
            return false;
        }
        pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
        if(pFile == NULL)
        {
            strDescript = "找不到网络地址" + strUrl;
            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[256];
            memset(buffer, 0, 256);
            int nReadCount = 0;
            while((nReadCount = pFile->Read(buffer, 2048)) > 0)
            {
                strContent += buffer;
                memset(buffer, 0, 256);
            }
            bRet = true;
        }
        else
        {
            strDescript = "网站服务器错误" + strUrl;
            bRet = false;
        }
       
        pFile->Close();
        sess.Close();
        return bRet;
    }
    catch(...)
    {
        int nCode = GetLastError();
        strDescript.Format("向服务器post失败!错误号:%d", nCode);
        return false;
    }
}

 

以上代码摘自CSDN论坛biweilun的帖子。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值