/**************************************************************
*此函数用于在MFC下实现POST网页表单,用于下载服务器文件或取得网页源代码
*说明:
*strServer、strObject、wPort:这几项的值都可以通过抓包工具轻松取得。
*我用的抓包工具是wireshark,摸索着就使用,还是挺简单的!
*headers、postData:这两项也可以通过抓包软件获得。
*协议头headers的形式较为固定,而postData需要具体形式自己构造。
*strHtml:此变量保存POST后返回的数据,网页源代码或服务器的文件
*若文件过大,可以直接写入本地文件,就不需要这个变量保存了。
**************************************************************/
#include <afxinet.h>
void HTTP_POST_DATA(CString strServer, CString strObject, WORD wPort, CString headers, CString postData, CString &strHtml)
{
CInternetSession session;
CHttpConnection* pHttpConnection = NULL;
CHttpFile *pHttpFile = NULL;
pHttpConnection = session.GetHttpConnection(strServer, wPort);
pHttpFile = pHttpConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST, strObject);
pHttpFile->AddRequestHeaders(headers);
pHttpFile->SendRequestEx(postData.GetLength());
pHttpFile->WriteString(postData);
pHttpFile->EndRequest();
DWORD dwRet;
pHttpFile->QueryInfoStatusCode(dwRet);
if(dwRet == HTTP_STATUS_OK)
{
char *pszBuffer = new char[1024];
UINT nRead = pHttpFile->Read(pszBuffer, 1024);
while(nRead > 0)
{
strHtml += CString(pszBuffer, nRead);
nRead = pHttpFile->Read(pszBuffer, 1024);
}
delete []pszBuffer;
}
if(pHttpFile != NULL)
{
pHttpFile->Close();
delete pHttpFile;
pHttpFile = 0;
}
if(pHttpConnection != NULL)
{
pHttpConnection->Close();
delete pHttpConnection;
pHttpConnection = 0;
}
session.Close();
return;
}