VC中Post表单的问题?

Eleven 2008-06-10 03:13:38
有一个网站http://www.zhulang.com/,小说站点,我想要用VC提取我指定的一部小说的内容,比如金庸的《鹿鼎记》,我现在要提交POST表单,我的程序代码如下,返回不正确,我的代码可能是头文件写错了,哪位高手帮我看看:这个头文件怎么写?
CHttpDownDemoDlg *pDlg=(CHttpDownDemoDlg*)lpParam;
CString strRequest="";
//strRequest+=pDlg->m_name;
strRequest+="action=action&key=鹿鼎记"; //这里写错了吧??哪位高手给看看,这个头文件该怎么写??谢谢
CString strServerName="www.zhulang.com";
CString strObjectName="/search.php";
INTERNET_PORT nPort=80;
CString strResponse="";
CInternetSession session("HttpSession");
CHttpConnection *pServer=NULL;
CHttpFile *pFile=NULL;
try
{
pServer=session.GetHttpConnection(strServerName,nPort);
pFile=pServer->OpenRequest(0,strObjectName);
char szHeaders[100];
memset(szHeaders,0,sizeof(szHeaders));
strcpy(szHeaders,"Accept: text*//*\r\nContent-Type: application/x-www-form-urlencoded");
pFile->AddRequestHeaders(szHeaders);

pFile->SendRequestEx(strRequest.GetLength());
pFile->WriteString(strRequest);
pFile->EndRequest();
DWORD dwRet=0;
pFile->QueryInfoStatusCode(dwRet);

char szBuf[1024];
memset(szBuf,0,sizeof(szBuf));
if(dwRet!=HTTP_STATUS_OK)
{
UINT nRead;
do
{
nRead=pFile->Read(szBuf,1023);
if(nRead!=0)
{
szBuf[nRead]=0;
strResponse+=szBuf;
}
} while(nRead!=0);
}
delete pFile;
delete pServer;
}
catch(CInternetException *pEx)
{
AfxMessageBox("ÍøÂçÒì³££¬ÇëÏȼì²âÍøÂ磡");
}
AfxMessageBox(strResponse);

哪位大侠给看看??
...全文
283 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2008-06-12
  • 打赏
  • 举报
回复
请问一下楼上的,这种是怎么转换的呢?正在做这个,网上大多是用ASP,PHP写的,看不懂的,有没有用C++写的呢?
Eleven 2008-06-11
  • 打赏
  • 举报
回复
提交可以了,还有一点问题就是我要查找的,比如说要找鹿鼎记这本小说,是不是要将鹿鼎记这三个字转成UTF-8格式以后,再Base64编码呢??,那个小说站是utf-8格式编码的!
jameshooo 2008-06-11
  • 打赏
  • 举报
回复
多个form还是多个submit?
Eleven 2008-06-11
  • 打赏
  • 举报
回复
我现在已经将UTF-8转成了GB2312了,现在的问题是没有返回我想要的搜索页面的结果,返回的是搜索出错的结果,这个小说的网站上有多个form,在我提交的strRequest是不是都要赋一定的值呢?
jameshooo 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 aj3423 的回复:]
可能网页POST时候 需要把中文转换成 %xx%yy%zz 的形式,我不知道这种形式叫做啥,但xxyyzz就是utf-8的3位,只是把每一位拆开前面加了个%, 你可以用sockmon抓包一下看看
[/Quote]

这种就叫URL编码,或者叫URL安全编码,跟utf-8完全是两回事。
Eleven 2008-06-11
  • 打赏
  • 举报
回复
sType=a1&classa=&classb=&key=%E9%B9%BF%E9%BC%8E%E8%AE%B0&%E6%8F%90%E4%BA%A4=%E6%90%9C%E7%B4%A2&action=action

上面的是用sniffer抓的包

上面的这个就是提交的5个参数,那个Key=后面的就是要查找的鹿鼎记三个字,不知道上面是怎么转的?
aj3423 2008-06-11
  • 打赏
  • 举报
回复
可能网页POST时候 需要把中文转换成 %xx%yy%zz 的形式,我不知道这种形式叫做啥,但xxyyzz就是utf-8的3位,只是把每一位拆开前面加了个%, 你可以用sockmon抓包一下看看
jameshooo 2008-06-10
  • 打赏
  • 举报
回复
判断一下是否有BOM信息,如果有就按照BOM转换,没有就按照utf-8解码
greatws 2008-06-10
  • 打赏
  • 举报
回复
看看页面的编码是什么,utf8还是gb2312,是否返回的为gzip压缩形式?
Eleven 2008-06-10
  • 打赏
  • 举报
回复
CHttpDownDemoDlg *pDlg=(CHttpDownDemoDlg*)lpParam;
CString strRequest="";
//strRequest+=pDlg->m_name;
strRequest+=_T("action=action&sType=&classa=&classb=key=");
strRequest+=_T("鹿鼎记");
CString strServerName=_T("www.zhulang.com");
CString strObjectName=_T("/search.php");
INTERNET_PORT nPort=80;
CString strResponse=_T("");
CInternetSession session(_T("HttpSession"));
CHttpConnection *pServer=NULL;
CHttpFile *pFile=NULL;
try
{
pServer=session.GetHttpConnection(strServerName,nPort);
pFile=pServer->OpenRequest(0,strObjectName);
char szHeaders[100];
memset(szHeaders,0,sizeof(szHeaders));
strcpy(szHeaders,_T("Accept: text*//*\r\nContent-Type: application/x-www-form-urlencoded"));
pFile->AddRequestHeaders(szHeaders);

pFile->SendRequestEx(strRequest.GetLength());
pFile->WriteString(strRequest);
pFile->EndRequest();
DWORD dwRet=0;
pFile->QueryInfoStatusCode(dwRet);

char szBuf[1024];
memset(szBuf,0,sizeof(szBuf));
if(dwRet==HTTP_STATUS_OK)
{
UINT nRead;
while((nRead=pFile->Read(szBuf,1023))>0)
{
strResponse+=CString(szBuf,nRead);
}
}
delete pFile;
delete pServer;
}
catch(CInternetException* e)
{
CString str;
str.Format("Internet Exception\r\nm_dwError%u,m_dwContextError%u",e->m_dwError,e->m_dwContext);
AfxMessageBox(str);
}
AfxMessageBox(strResponse);

修改成这样以后,返回的页面是乱码?哪位大侠给指点一下!
jameshooo 2008-06-10
  • 打赏
  • 举报
回复
strRequest += "action=action&key=";
strRequest += UrlEscape("鹿鼎记");

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧