CHttpFile POST 时 Cookie 疑问

来源:互联网 发布:淘宝退货率在哪里看 编辑:程序博客网 时间:2024/06/11 10:48


POST   的例子:

http://bbs.csdn.net/topics/310014521



bool PostContent(CString strUrl, const CString &strPara, CString &strContent, CString &strDescript)
{
    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: text/xml; charset=utf-8");
        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
        {
            strDescript = "网站服务器错误" + strUrl;
            bRet = false;
        }
        ////////////////////////////////////////
        pFile->Close();
        sess.Close();
        return bRet;
    }
    catch(...)
    {
        int nCode = GetLastError();
        strDescript.Format("向服务器post失败!错误号:%d", nCode);
        return false;
    }
}

但是在 POST 带有Cookie时使用那种方式会得不到想要的结果,解决办法为:




http://www.reader8.cn/jiaocheng/20120219/2233441.html



CHttpFile 设置cookie的疑问我在模拟给百度发get数据http://www.baidu.com/s?wd123想加入Cookie: BAIDUID

CHttpFile 设置cookie的疑问
我在模拟给百度发get数据
http://www.baidu.com/s?wd=123
想加入Cookie: BAIDUID=11111111111111111111111111111111:FG=1; USERID=222222222222222222222222; J_MY=1

但是抓包怎么都看不到这个信息。

C/C++ code
....pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET,strPara,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT); pFile->AddRequestHeaders("Accept: */*"); pFile->AddRequestHeaders("Accept-Language: zh-cn");pFile->AddRequestHeaders("User-Agent: Mozilla/4.0");pFile->AddRequestHeaders("Connection: Keep-Alive");pFile->AddRequestHeaders("Cookie: BAIDUID=11111111111111111111111111111111:FG=1; USERID=222222222222222222222222; J_MY=1");....
抓包后发现Cookie: BAIDUID=90167E2729B1C6B3C51D254097849AA8:FG=1; USERID=1b10bc91b31e48a202df443d; J_MY=1

不知道怎么回事了。

[解决办法]
pServer->OpenRequest加上INTERNET_FLAG_NO_COOKIES
OpenRequest(CHttpConnection::HTTP_VERB_GET,strPara,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT|INTERNET_FLAG_NO_COOKIES);
0 0
原创粉丝点击