VC Post 数据到php的一点小疑点
VC Post 数据到php的一点小问题
//发送POST请求实现函数
用浏览器登陆正常,但调用PostContent Post 上去的数据全部是空的,求解。
总是返回 “请输入用户名或密码”
------解决思路----------------------
看上去还是你的数据格式不正确
------解决思路----------------------
使用Fiddler2工具抓HTTP包,分别抓浏览器登陆的HTTP包和你自己写的程序请求的HTTP包,观察两者哪里不一样,
请求头,请求的数据,有没有差异
//发送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包,观察两者哪里不一样,
请求头,请求的数据,有没有差异