问题1、下面代码是通过http://www.ip138.com/,根据IP查找所在地区的,可是程序会挂掉,请高手指教?void PostForm()
{
CInternetSession session("My Session");
CHttpConnection *pServer = NULL;
CHttpFile *pFile = NULL;
CString ServerName = "www.ip138.com";
INTERNET_PORT nPort = 80;
DWORD retcode;
char outBuff[1024] = {0};
char IP[] = "www.baidu.com";
sprintf(outBuff, "ip=%s&action=2", IP);
try
{
pServer = session.GetHttpConnection(ServerName,nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,"ips8.asp",NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
pFile->AddRequestHeaders("Content-Type:application/x-www-form-urlencoded");
pFile->AddRequestHeaders("Accept:*/*");
pFile->SendRequest(NULL,0,outBuff,strlen(outBuff)+1);
pFile->QueryInfoStatusCode(retcode);
DWORD dwlen=pFile->GetLength();
char *buf = new char[dwlen];
DWORD dwread=pFile->Read(buf,1024);//下一步就死了
printf("%s\n", buf);
delete []buf;
}
catch (CInternetException e)
{
printf("Error Occur!\n");
}
delete pFile;
delete pServer;
session.Close();
}
问题2、怎么在下面代码的基础上改为用GET方式提交?//computer.jsp功能为根据三角形三边求面积
void PostForm()
{
CInternetSession session("My Session");
CHttpConnection *pServer = NULL;
CHttpFile *pFile = NULL;
CString ServerName = "127.0.0.1";
INTERNET_PORT nPort = 8080;
DWORD retcode;
char outBuff[] = "sideA=3&sideB=4&sideC=5";//三角形三边
try
{
pServer = session.GetHttpConnection(ServerName,nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,"computer.jsp",NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
pFile->AddRequestHeaders("Content-Type:application/x-www-form-urlencoded");
pFile->AddRequestHeaders("Accept:*/*");
pFile->SendRequest(NULL,0,outBuff,strlen(outBuff)+1);
pFile->QueryInfoStatusCode(retcode);
DWORD dwlen=pFile->GetLength();
char *buf = new char[dwlen];
DWORD dwread=pFile->Read(buf,1024);
printf("%s\n", buf);
delete []buf;
}
catch (CInternetException e)
{
AfxMessageBox("Error Occur!");
}
delete pFile;
delete pServer;
session.Close();
}
{
CInternetSession session("My Session");
CHttpConnection *pServer = NULL;
CHttpFile *pFile = NULL;
CString ServerName = "www.ip138.com";
INTERNET_PORT nPort = 80;
DWORD retcode;
char outBuff[1024] = {0};
char IP[] = "www.baidu.com";
sprintf(outBuff, "ip=%s&action=2", IP);
try
{
pServer = session.GetHttpConnection(ServerName,nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,"ips8.asp",NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
pFile->AddRequestHeaders("Content-Type:application/x-www-form-urlencoded");
pFile->AddRequestHeaders("Accept:*/*");
pFile->SendRequest(NULL,0,outBuff,strlen(outBuff)+1);
pFile->QueryInfoStatusCode(retcode);
DWORD dwlen=pFile->GetLength();
char *buf = new char[dwlen];
DWORD dwread=pFile->Read(buf,1024);//下一步就死了
printf("%s\n", buf);
delete []buf;
}
catch (CInternetException e)
{
printf("Error Occur!\n");
}
delete pFile;
delete pServer;
session.Close();
}
问题2、怎么在下面代码的基础上改为用GET方式提交?//computer.jsp功能为根据三角形三边求面积
void PostForm()
{
CInternetSession session("My Session");
CHttpConnection *pServer = NULL;
CHttpFile *pFile = NULL;
CString ServerName = "127.0.0.1";
INTERNET_PORT nPort = 8080;
DWORD retcode;
char outBuff[] = "sideA=3&sideB=4&sideC=5";//三角形三边
try
{
pServer = session.GetHttpConnection(ServerName,nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,"computer.jsp",NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
pFile->AddRequestHeaders("Content-Type:application/x-www-form-urlencoded");
pFile->AddRequestHeaders("Accept:*/*");
pFile->SendRequest(NULL,0,outBuff,strlen(outBuff)+1);
pFile->QueryInfoStatusCode(retcode);
DWORD dwlen=pFile->GetLength();
char *buf = new char[dwlen];
DWORD dwread=pFile->Read(buf,1024);
printf("%s\n", buf);
delete []buf;
}
catch (CInternetException e)
{
AfxMessageBox("Error Occur!");
}
delete pFile;
delete pServer;
session.Close();
}
解决方案 »
- CArchive 结构体的读写
- 如何判断某个点是否在客户区内?
- hook中如何判断自身调用?
- SOCKET 怎样实现服务器端通知客户端服务器要停止运行
- 利用hook修改界面的问题,请高手执教
- 我想知道某个特定文件现在是否被使用,想通过测试fopen
- 关于字符串的处理问题
- DAO 打开数据库时 出错(can't find installable IASM)请教?
- 程序在机子上运行图形处理函数但机子上又没C怎么办C???????????
- creatprocess创建的进程自己又启动了新的子进程,如何监视该子进程
- ★★感觉有点难度的问题,关于shell extension,达人进来一看★★
- 对单、双字节字符混合的文本文件怎么找到选定位置?
catch (CInternetException* e)
{
e->ReportError();
e->Delete();
}
/**********************************************************************************
*函数名称: GetMethld
*功能说明: Get方式发送请求
*参数列表: strURL : 带有GET请求的地址
* strHTML : 返回的页面的HTML代码
**********************************************************************************/
BOOL SimSearch::GetMethld(CString strURL , CString& strHTML)
{
try
{
BOOL bRet = FALSE; CInternetSession mySession(NULL,0);
CHttpFile* pFile=NULL; CString strSentence; //strSentence.Format("%d",db pFile=(CHttpFile*)mySession.OpenURL(strURL);
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[1024*56];
memset(buffer, 0, 1024*56);
int nReadCount = 0;
while((nReadCount = pFile->Read(buffer, 1024*56)) > 0)
{
strHTML += buffer;
memset(buffer, 0, 1024*56);
}
bRet = TRUE;
}
else //有错误 记录日志
{
bRet = FALSE;
}
pFile->Close();
mySession.Close();
return bRet;
}
catch(CInternetException* e)
{
CString strError;
InternetErrorOccurHandler(e , strError);
//s_ErrorLog.WriteLogWithTime(strError);
return FALSE;
}
}POST函数
/**********************************************************************************
*函数名称: PostDataBase
*功能说明: 满足部分基础的Post数据提交 -- 即 不用AddRequest增加特殊的请求头
*参数列表: strURL : Post提交的链接地址
* strPostData : 需要提交的数据内容
* strHTML : 提交后返回的HTML代码
**********************************************************************************/
BOOL SimSearch::PostDataBase(CString strURL , CString strPostData , CString& strHTML)
{
try
{
BOOL bRet;
CString strServer, strObject, strHeader, strRet;
unsigned short nPort;
DWORD dwServiceType;
if(!AfxParseURL(strURL, dwServiceType, strServer, strObject, nPort))
return FALSE; CInternetSession sess; //创建会话 CHttpFile* pFile;
//////////////////////////////////////////////
CHttpConnection *pServer = sess.GetHttpConnection(strServer, nPort);
if(pServer == NULL)
return FALSE; pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_POST,strObject,NULL,1,NULL,NULL,INTERNET_FLAG_EXISTING_CONNECT);
if(pFile == NULL)
return FALSE; pFile -> AddRequestHeaders("Content-Type: application/x-www-form-urlencoded");
pFile -> AddRequestHeaders("Accept: */*");
pFile -> SendRequest(NULL, 0, (LPTSTR)(LPCTSTR)strPostData, strPostData.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[1024*56];
memset(buffer, 0, 1024*56);
int nReadCount = 0;
while((nReadCount = pFile->Read(buffer, 1024*56)) > 0)
{
strHTML += buffer;
memset(buffer, 0, 1024*56);
}
bRet = TRUE;
}
else
{
bRet = FALSE;
} ////////////////////////////////////////
pFile->Close();
sess.Close();
return bRet;
}
catch(...)
{
int nCode = GetLastError();
return FALSE;
}
}
但是用http://alexa.chinaz.com/?domain=www.baidu.com测试时返回以下消息
<script language="javascript">alert("您已经被禁止使用我们的查询服务。\n\n有任何
疑问请联系 QQ 7679512!");window.location.href("/Index.asp");</script>
问题2中我的意思是在原代码的基础上修改,使用OpenRequest函数(参数用CHttpConnection::HTTP_VERB_GET)进行表单提交
具体东西还是抓包吧 按照你抓获的IE的HTTP封包自己组包 发送 不是什么难事