我在使用ChttpFile 向一个网站POST数据的时候 截获了发送出去的封包 , 发现发送出去的方式是GET方式
发送的代码为
CInternetSession session;
CHttpFile* pFile =(CHttpFile*)session.OpenURL(url);//打开文件
BOOL result = pFile->SendRequest(strHeader, (LPVOID)(LPCTSTR)PostData, PostData.GetLength());返回的数据是这个网站的首页...通过参照网上的POST事例 我又改了一下 增加了一个CHttpConnection
发送的代码为
CHttpConnection* pConnection = session.GetHttpConnection("url,0,80,NULL,NULL);
CHttpFile* pFile = Connection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"
/chaxunjieguo.asp?ac=wf" );
BOOL result = pFile->SendRequest(strHeader, (LPVOID)(LPCTSTR)PostData, PostData.GetLength());通过截获的数据包分析,没有什么问题.但是此时发送就是一个域名解析错误... 问题:
1. 第一种方案里面有没有能够改变发送数据方式(将GET转换为POST) ?
2. 第二种方案为什么会出现域名解析错误?
发送的代码为
CInternetSession session;
CHttpFile* pFile =(CHttpFile*)session.OpenURL(url);//打开文件
BOOL result = pFile->SendRequest(strHeader, (LPVOID)(LPCTSTR)PostData, PostData.GetLength());返回的数据是这个网站的首页...通过参照网上的POST事例 我又改了一下 增加了一个CHttpConnection
发送的代码为
CHttpConnection* pConnection = session.GetHttpConnection("url,0,80,NULL,NULL);
CHttpFile* pFile = Connection->OpenRequest(CHttpConnection::HTTP_VERB_POST,"
/chaxunjieguo.asp?ac=wf" );
BOOL result = pFile->SendRequest(strHeader, (LPVOID)(LPCTSTR)PostData, PostData.GetLength());通过截获的数据包分析,没有什么问题.但是此时发送就是一个域名解析错误... 问题:
1. 第一种方案里面有没有能够改变发送数据方式(将GET转换为POST) ?
2. 第二种方案为什么会出现域名解析错误?
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;
}
}
你看这个改改看