CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

如何用BCB向一个网站自动Post后,取到返回的html内容?

楼主BCB(天下三分明月夜,二分无赖是扬州)2006-06-18 21:03:05 在 C++ Builder / 基础类 提问

有一个据考试证号查小孩考试成绩的网站,  
    http://www.url.com/scorecx.asp,   手工输入证号参数后,点查询按钮,  
  它提交(Post)到(action="http://www.url.com/xscloginscore.asp")  
  后,自动返回http://www.url.com/xscuserloginscore.asp页面,  
  可看到姓名、成绩,这一切都是手动输入的!  
  我现在想取得所有学生的分数(已知道证号是连续范围),  
  想让程序自动提交证号,再从返回的页面中析取得成绩。  
  我已将提交的页面   http://www.url.com/scorecx.asp   保存到本机文件中:  
  C:\chaFS\chaFS.htm   并用文一编辑器将证号填入其中,  
  在IE中显示c:\chaFS\chaFS.htm,人工点"发送"(POST),  
  就能返回查询的分数结果;现在我的要求是,:  
        1.     如何自动POST       c:\chaFS\chaFS.htm  
        2.     取得返回的:     http://www.url.com/xscuserloginscore.asp内容  
  只要这两步,求助!!!!!  
   
   
   
   
   
   
   
   
  问题点数:100、回复次数:23Top

1 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2006-06-18 21:07:29 得分 0

提交的页面及返回的页面URL不一样,用TNMHTTP看样子不行,  
  可能要用CppWebBrowser,我并没用用过此控件,求助!  
  Top

2 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2006-06-18 21:53:00 得分 0

1.自动POST:  
  ccrun(老妖)(www.ccrun.com)   :  
        取得该页面的IHTMLDocument2接口,然后通过get_forms和item方法取得表单,通过             IHTMLFormElement接口的的submit方法进行提交。  
  2。取返回新窗口中的HTML  
        http://community.csdn.net/Expert/topic/4335/4335257.xml?temp=.995434  
  非得老妖解决了  
  Top

3 楼ccrun(老妖)(www.ccrun.com)回复于 2006-06-19 00:08:48 得分 0

BCB老大也问问题啊?呵呵。  
   
  一般网页通过Form提交数据都可以直接以参数的形式来实现,比如:  
  www.url.com/scorecx.asp页面中有一个Form,Action是http://www.url.com/xscuserloginscore.asp,假设Form中有个<input   type="text"   name="StudentID"   size="20">是用来填写学生的证件号,现在要获取证件号为123456的学生的成绩,那么可以直接访问http://www.url.com/xscuserloginscore.asp?StudentID=123456这个地址。这样的话呢,就可以不用CppWebBrowser,直接用Socket   API或TNMHTTP组件,接收到服务器返回的内容以后,再通过IHTMLDocument2接口分析网页内容,找到显示成绩的元素索引或ID什么的,就可以通用了。  
  Top

4 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2006-06-19 12:44:27 得分 0

呵呵,老妖出山就有希望!  
  问题是用的是Post,不是Get,这下面是你在别的贴子中的留言:  
    取得该页面的IHTMLDocument2接口,然后通过get_forms和item方法取得表单,通过             IHTMLFormElement接口的的submit方法进行提交。  
  具体怎做呢?  
  Top

5 楼jcsun(超)回复于 2006-08-17 14:20:13 得分 0

请参见BCB自带的例子:  
  C:\Program   Files\Borland\CBuilder6\Examples\FastNet\HTTPTop

6 楼revulet(云飞扬)回复于 2006-09-04 22:56:33 得分 0

使用indy   idhttp应该很容易实现Top

7 楼netliuming(你有安全感吗?)回复于 2006-09-05 10:02:40 得分 0

确实使用indy   idhttp很易实现。Top

8 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-09-05 10:27:03 得分 100

#include   <Mshtml.h>  
  AnsiString   __fastcall   TForm3::Submit(void)  
  {  
  IHTMLDocument2   *pHTMLDoc   =   NULL;  
  LPDISPATCH   pDisp   =   NULL;  
  pDisp   =CppWebBrowser1->Document;  
  if(pDisp)  
      {  
      if   (SUCCEEDED(pDisp->QueryInterface(IID_IHTMLDocument2,   (void**)&pHTMLDoc)))  
          {  
          pDisp->Release();  
          IHTMLElementCollection   *pelement;  
          if(pHTMLDoc->get_forms(&pelement)!=S_OK)  
              {  
              pHTMLDoc->Release();  
              pDisp->Release();  
              pelement->Release();  
              return   "1发送失败";  
              }  
          pDisp->Release();  
          tagVARIANT   a,i;  
          a.vt=VT_UI4;  
          a.lVal=0;//这个值为你所要填写的表单在整个网页中的顺序,0为第一个表单  
          if(pelement->item(a,i,&pDisp)!=S_OK)  
              {  
              pelement->Release();  
              pDisp->Release();  
              return   "2发送失败";  
              }  
          pelement->Release();  
          IHTMLFormElement*   pFormElem=NULL;  
          if(pDisp)  
              {  
              if(!SUCCEEDED(pDisp->QueryInterface(IID_IHTMLFormElement,(LPVOID*)&pFormElem)))  
                  {  
                  pFormElem->Release();  
                  pDisp->Release();  
                  return   "3发送失败";  
                  }  
              }  
          else  
              {  
              return   "31发送失败";  
              }  
          pDisp->Release();  
          LPDISPATCH   pDisp_msg   =   NULL;  
          tagVARIANT   phone,msg,empty;  
          phone.vt=VT_UI4;  
          phone.lVal=0;//这个值为Input框在表单中的顺序  
          msg.vt=VT_UI4;  
          msg.lVal=1;//这个值为Text文本框在表单中的顺序  
          if((pFormElem->item(phone,empty,&pDisp)!=S_OK)||(pFormElem->item(msg,empty,&pDisp_msg)!=S_OK))  
              {  
              pFormElem->Release();  
              if(pDisp)  
                  pDisp->Release();  
              if(pDisp_msg)  
                  pDisp_msg->Release();  
              return   "4发送失败";  
              }  
          IHTMLInputTextElement*   phoneElem=NULL;  
          IHTMLTextAreaElement*   msgElem;  
          if(!pDisp||!pDisp_msg)  
              return   "11失败";  
          if   (!SUCCEEDED(pDisp->QueryInterface(IID_IHTMLInputTextElement,   (void**)&phoneElem))||(!SUCCEEDED(pDisp_msg->QueryInterface(IID_IHTMLTextAreaElement,   (void**)&msgElem))))  
              {  
              if(phoneElem)  
                  phoneElem->Release();  
              if(msgElem)  
                  msgElem->Release();  
              if(pDisp)  
                  pDisp->Release();  
              if(pDisp_msg)  
                  pDisp_msg->Release();  
              return   "5发送失败";  
              }  
          WideString   s_phone,s_msg;  
          s_phone="888888"  
          s_msg="你好";  
          phoneElem->put_value(s_phone.c_bstr());//填写  
          msgElem->put_value(s_msg.c_bstr());//填写  
          pFormElem->submit();//提交  
          phoneElem->Release();  
          msgElem->Release();  
          pDisp->Release();  
          pDisp_msg->Release();  
          pFormElem->Release();  
          return   "发送成功";  
          }  
      }  
  return   "发送失败";  
  }Top

9 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2006-09-05 17:02:27 得分 0

呵呵,我以为这个贴子已无人解决,  
  我来看看,首先表示感谢!Top

10 楼truelove7283159(大头娃娃http://traversite.blog.sohu.com)回复于 2006-09-05 20:59:42 得分 0

首先学习一下Top

11 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2006-09-06 13:27:22 得分 0

大家也邦我试试,Top

12 楼daydayup234(关中刀客)回复于 2006-09-06 16:41:01 得分 0

蒋老大的代码怎样应用在  
  http://passport.csdn.net/UserLogin.aspx  
  只post  
  出错  
   
   
  Top

13 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-09-06 22:57:13 得分 0

CSDN那个有图片验证码的……Top

14 楼yhec(@_@ 俺是贫农俺怕谁)回复于 2006-09-07 08:22:11 得分 0

http://dev.csdn.net/develop/article/16/16129.shtmTop

15 楼daydayup234(关中刀客)回复于 2006-09-07 10:48:51 得分 0

TO   jiangsheng(蒋晟.Net[MVP])  
  -------------------------------------------  
  Submit(void)针对  
  http://www.url.com/scorecx.asp如何用  
   
  如何改?  
   
  Top

16 楼wanglovec(阳光飞舞)回复于 2006-09-07 10:53:38 得分 0

呵呵,   这么多高手都来了.我原来用VB写了一个   .(网上抓取数据   写入数据库中)窃   楼主应该先分析   网页    
   
  希望高手们不要BS   呵呵Top

17 楼daydayup234(关中刀客)回复于 2006-09-07 11:00:10 得分 0

TO   yhec  
  -------------------------------------------  
  WebPostData(CppWebBrowser1,"http://www.baidu.com/","太阳");  
  这个错  
   
  这个目标怎么调用WebPostData?Top

18 楼sncel(地狱情人-杨勇)回复于 2006-09-08 10:59:33 得分 0

留下mail,给你个http访问类,不用这些组件操作.Top

19 楼scsjs(闪电回归)回复于 2006-09-08 11:29:34 得分 0

IHTMLDocument2   接口,很煩人的說.  
  至少30行以上的代碼  
   
  更傾向與用   javascript   方法來實現.   一行就可以直接post了Top

20 楼wfhlxl(光明正大地偷......学)回复于 2006-09-08 11:33:51 得分 0

TIdHTTP   这个一定能行的  
  this->IdHTTP1->Post("");Top

21 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2006-09-22 16:40:39 得分 0

to   蒋老大  
  没有一点解释或注解,不知怎样用?Top

22 楼BCB(天下三分明月夜,二分无赖是扬州)回复于 2006-10-29 19:57:12 得分 0

蒋老大的这段代码到现在才明白一点,马上要总结一下Top

23 楼zxjrainbow(小笨象)回复于 2006-10-30 10:03:23 得分 0

这段代码,貌似以前看过。Top

相关问题

关键词

得分解答快速导航

  • 帖主:BCB
  • jiangsheng

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo