VC Post 数据到php的一点小疑点

VC Post 数据到php的一点小问题
本帖最后由 oyljerry 于 2015-01-20 14:54:48 编辑
//发送POST请求实现函数
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 + _T("不是有效有网络地址!");
return false;
}
CInternetSession sess;//Create session

CHttpFile* pFile;
//////////////////////////////////////////////
CHttpConnection *pServer = sess.GetHttpConnection(strServer, nPort);
if (pServer == NULL)
{
strDescript = _T("对不起,连接服务器失败!");
return false;
}
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject, NULL, 1, NULL, NULL, INTERNET_FLAG_EXISTING_CONNECT);
if (pFile == NULL)
{
strDescript = _T("找不到网络地址") + strUrl;
return false;
}

pFile->AddRequestHeaders(_T("Content-Type: application/x-www-form-urlencoded"));
pFile->AddRequestHeaders(_T("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 = _T("网站服务器错误") + strUrl;
bRet = false;
}
////////////////////////////////////////
pFile->Close();
sess.Close();
return bRet;
}
catch (...)
{
int nCode = GetLastError();
strDescript.Format(_T("向服务器post失败!错误号:%d"), nCode);
return false;
}
}

void CLogin::OnOK()
{
CString strUserName = _T("admin");
CString strPassword = _T("123456");
CString RecvData,Descript;

CString strUserinfo = _T("username=") + strUserName + _T("&password=") + strPassword;
if (PostContent(_T("http://www.xxx.com/Login.php"), strUserinfo, RecvData, Descript))
MessageBox(RecvData);
else
MessageBox(Descript);
}

PHP 端
<?php  
     $user = $_POST["username"];  
     $psw = $_POST["password"];  
     if($user == "" || $psw == "")  
     {  
         echo "<script>alert('请输入用户名或密码!'); history.go(-1);</script>";  
     }  
     else  
     {  
       mysql_connect("xxx", "xxx","xxx")or die("无法连接数据库,请重来");
        mysql_select_db("xxx") or die("无法选择数据库,请重来");
        mysql_query("set names 'gbk'"); 
        $sql = "select UserName,Password from User where UserName = '$_POST[username]' and Password = '$_POST[password]'";  
        $result = mysql_query($sql);  
        $num = mysql_num_rows($result);  
        if($num)  
        {  
            $row = mysql_fetch_array($result);  //将数据以索引方式储存在数组中  
            echo $row[0];  
        }  
        else  
        {  
            echo "用户名或密码不正确!";  
        }
    } 
?>

用浏览器登陆正常,但调用PostContent Post 上去的数据全部是空的,求解。
总是返回 “请输入用户名或密码”
------解决思路----------------------
看上去还是你的数据格式不正确
------解决思路----------------------
使用Fiddler2工具抓HTTP包,分别抓浏览器登陆的HTTP包和你自己写的程序请求的HTTP包,观察两者哪里不一样,
请求头,请求的数据,有没有差异