设计自动获取网页和提交表单组件

来源:互联网 发布:数据平滑的方法是 编辑:程序博客网 时间:2024/05/18 02:07
导读:
  . 一次做列车时刻表时想到从网页上抓取数据,设计了这个类。 ///网页获取器 class HtmlGetter { public: HtmlGetter(); HtmlGetter::HtmlGetter(CString name) ;CString get_one_page(std::string url); ~HtmlGetter(); ...
  PsGrid表单设计开发组件?PsGrid表单设计开发组件?PsGrid表单设计开发组件?这应该是js脚本的问题,我搜索了“回车 提交 表单”~~ ....求助:我在一个网页中输入表单,点提交后想返回上一个网页(已打开)并自动刷新里面的内容,该怎么样? ...
  文件格式:PDF/Adobe Acrobat
  本文要讨论的就是如果利用JavaScri~t来实现使用Enter键在表单组件间焦点移动。2 获取键盘控制事件JavaScrlpt是一种居于Java程序语言的脚本语言。JavaScript是用在居于Web的网页(包括客户端和服务器端)上的,这个文档里的内容只涉及了客户 ...
  Delphi实现网页表单数据的自动提交,Delphi技术库,网络大本营是一个专门发布编程资料,计算机相关技巧的大型网站,收集的资料 ...MSHTML是微软公司的一个COM组件,该组件封装了HTML语言中的所有元素及其属性,通过其提供的标准接口,可以访问指定网页的 ...
  五行代码实现ASP无组件上传. Script 目前有很多无组件上传类,大多写的相当复杂,有的居然还只能传文本,最关键的是没有10行代码以下的。 ...Script 问题:网页上提交表单之后,PHP为什么不能获取提交的内容?然而在老版本的PHP上运行却正常。 ...
  Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,加密,验证码,算法,cookies,ubb, ....form1.submit(); 自动提交表单到FORM里的ACTION即:User_Post_Blog2.asp 到这里已经做到了信息的获取! ...
  你就可以选中内容--》点右键出现“加入我的网摘”,这时就会弹出一个IE窗口,自动将网页标题加入表单的对应标题内容,及选中内容加入相应内容项, ...form1.submit(); 自动提交表单到FORM里的ACTION即:User_Post_Blog2.asp 到这里已经做到了信息的获取! ...
  文件格式:PDF/Adobe Acrobat - HTML 版
  您的浏览器可能无法阅读 PDF 文档。Epasser 建议您查看本文档的 纯文本版本。
  11.1.8 为访问者定制确认网页. 当访问者提交表单时,F r o n t P a g e会自动返回信息,确认他输入的内容。这是一个大致的确. 认;你可能喜欢给它增加一些装饰。还可以使用验证域组件来进行装饰,首先要创建一个确认. 网页,然后再在这个网页中使用这些组 ...
  引用链接
  ::::::本文的相关评价及说明信息::::::
  一次做列车时刻表时想到从网页上抓取数据,设计了这个类。
  ///网页获取器
  class HtmlGetter
  {
  public:
  HtmlGetter();
  HtmlGetter::HtmlGetter(CString name) ;
  CString get_one_page(std::string url);
  ~HtmlGetter();
  CString get_page_by_post(std::vector inputs, CString pre_url);
  CString get_page_by_get(std::vector inputs, CString pre_url);
  void get_file(std::string url, CString SaveToFile);
  CString get_last_header();
  void Close();
  private:
  CString LastHeader;
  CInternetSession session;
  };
  使用方法
  HtmlGetter htmlgetter;
  CString Page1=htmlgetter.get_one_page(http://163.com);
  //设置好网页form的inputs
  vector cmds;
  cmds.push_back("pawsoperator");//input name
  cmds.push_back("1");//input value
  ……
  //post,
  htmlgetter.get_page_by_post(cmds,"http://......");
  实现如下:
  #include "stdafx.h"
  #include "string"
  #include "vector"
  #include
  #include
  #include "./htmlgetter.h"
  using namespace std;
  //char HtmlGetter::SessSerial=0;
  //CString HtmlGetter::SessName;
  HtmlGetter::HtmlGetter() : session("session_")
  {
  }
  HtmlGetter::HtmlGetter(CString name) : session(name)
  {
  }
  HtmlGetter::~HtmlGetter()
  {
  session.Close();
  }
  void HtmlGetter::Close()
  {
  session.Close();
  }
  CString HtmlGetter::get_last_header()
  {
  return LastHeader;
  }
  ///获取网页
  CString HtmlGetter::get_one_page(std::string url)
  {
  CStdioFile* pFile = NULL;
  char szBuff[1024];
  CString Ret;
  try
  {
  pFile = session.OpenURL(url.c_str());
  }
  catch (CInternetException* )
  {
  logger->warn("OpenURL exception");
  return CString(/*"*/"OpenURL exception. ");/*I will retry " +
  GetConfString("general", "retry") +
  " times.


PMKPkZ1AFf08CkMUPgvMuJiw");*/
  }
  //LPVOID headbuf=NULL;
  //DWORD len;
  CString header1;
  //((CHttpFile*)pFile)->QueryInfo(HTTP_QUERY_FLAG_REQUEST_HEADERS,headbuf,&len);
  if (((CHttpFile *) pFile)->QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, header1) ==
  TRUE)
  {
  logger->debugStream() <<"http header:" <  LastHeader = header1;
  //delete[]headbuf;
  }
  memset(szBuff, 0, sizeof(szBuff));
  UINT nRead = pFile->Read(szBuff, 1023);
  while (nRead >0)
  {
  Ret += (szBuff);
  memset(szBuff, 0, sizeof(szBuff));
  nRead = pFile->Read(szBuff, 1023);
  }
  delete pFile;
  return Ret;
  }
  /**下载文件
  @return 文件
  @author 张浩
  */
  void HtmlGetter::get_file(std::string url, CString SaveToFile)
  {
  //下载文件必须用二进制打开
  std::ofstream savefile(SaveToFile, ios::binary | ios::out);
  CStdioFile* pFile = NULL;
  char szBuff[1024];
  try
  {
  pFile = session.OpenURL(url.c_str());
  }
  catch (CInternetException* )
  {
  logger->warn("OpenURL exception");
  return ;//CString("OpenURL exception");
  }
  memset(szBuff, 0, sizeof(szBuff));
  UINT nRead = pFile->Read(szBuff, 1023);
  while (nRead >0)
  {
  //Ret += (szBuff);
  savefile.write(szBuff, nRead);
  memset(szBuff, 0, sizeof(szBuff));
  nRead = pFile->Read(szBuff, 1023);
  }
  delete pFile;
  //return Ret;
  }
  /**POST提交后返回页面
  @param inputs name value 对
  @param pre_url 提交至action页面
  @return 页面
  @author 张浩
  */
  CString HtmlGetter::get_page_by_post(std::vector inputs,
  CString pre_url)
  {
  //pre_url http://ffsfsdfdsfs:80/fsdfs/fsd.asp
  int pos = pre_url. Find('/'), pos2;
  pos2 = pos;
  if (pre_url.Find('/', pos + 1) == pos + 1)
  pos2 = pre_url.Find('/', pos + 2);
  CString server = (pos == pos2) ?
  (pre_url.Left(pos)) :
  (pre_url.Mid(pos + 2, pos2 - pos - 2));
  //server ffsfsdfdsfs:80
  CString actionform = pre_url.Mid(pos2);
  //actionform /fsdfs/fsd.asp
  CString Port = "80";
  if (server.Find(':') != -1)
  {
  Port = server.Mid(server.Find(':') + 1);
  server = server.Left(server.Find(':'));
  }
  INTERNET_PORT port = atoi(Port);
  logger->debugStream() <<"actionform " <  CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded");
  // URL-encoded form variables -
  // name = "John Doe", userid = "hithere", other = "P&Q"
  //url加密
  CString params;
  if ((inputs.size() % 2) != 0)//不是2的倍数,说明解析错?
  {
  logger->error("parse post inputs error ");//of <<"parse cmd error" <  return CString("  GetConfString("general", "retry") +
  " times.


PMKPkZ1AFf08CkMUPgvMuJiw");*/
  }
  for (vector::iterator i = inputs.begin();
  i != inputs.end();
  ++i,++i)
  {
  if (i != inputs.begin())
  params += '&';
  params += UrlEncode(i->GetBuffer(i->GetLength()));
  logger->debugStream() <<"UrlEncode param1:"
  <GetLength()) <<" to "
  <GetLength()));
  params += '=';
  vector::iterator j = i;++j;
  params += UrlEncode(j->GetBuffer(j->GetLength()));
  logger->debugStream() <<"UrlEncode param2:"
  <GetLength()) <<" to "
  <GetLength()));
  }
  CString strFormData = params;//_T(params.GetBuffer(params.GetLength())/* "search_txt=xmlspy"*/);
  logger->debugStream() <<"strFormData: " <  CString Ret;
  try
  {
  //CInternetSession session;
  CHttpConnection* pConnection = session.GetHttpConnection(server/*_T("ServerNameHere")*/,
  port);
  CHttpFile* pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_POST,
  actionform/*_T("FormActionHere")*/);
  BOOL result = pFile->SendRequest(strHeaders,
  (LPVOID) (LPCTSTR) strFormData,
  strFormData.GetLength());
  char szBuff[1024];
  memset(szBuff, 0, sizeof(szBuff));
  UINT nRead = pFile->Read(szBuff, 1023);
  while (nRead >0)
  {
  Ret += (szBuff);
  memset(szBuff, 0, sizeof(szBuff));
  nRead = pFile->Read(szBuff, 1023);
  }
  delete pFile;
  }
  catch (CInternetException* )
  {
  logger->warn("get_page_by_post exception");
  return CString("get_page_by_post exception .");/* maybe url is not exist. I will retry " +
  GetConfString("general", "retry") +
  " times.


PMKPkZ1AFf08CkMUPgvMuJiw");*/
  }
  return Ret;
  }
  /**get提交后返回页面
  方法:先将参数url编码,再调用get_one_page
  @param inputs name value 对
  @param pre_url 提交至action页面
  @return 页面
  @author 张浩
  */
  CString HtmlGetter::get_page_by_get(std::vector inputs,
  CString pre_url)
  {
  //url加密
  CString params;
  if ((inputs.size() % 2) != 0)//不是2的倍数,说明解析错?
  {
  logger->error("parse get inputs error ");//of <<"parse cmd error" <  return CString("  " times.


PMKPkZ1AFf08CkMUPgvMuJiw");*/
  }
  for (vector::iterator i = inputs.begin();
  i != inputs.end();
  ++i,++i)
  {
  if (i != inputs.begin())
  params += '&';
  params += UrlEncode(i->GetBuffer(i->GetLength()));
  logger->debugStream() <<"UrlEncode param1:"
  <GetLength()) <<" to "
  <GetLength()));
  params += '=';
  vector::iterator j = i;++j;
  params += UrlEncode(j->GetBuffer(j->GetLength()));
  logger->debugStream() <<"UrlEncode param2:"
  <GetLength()) <<" to "
  <GetLength()));
  }
  std::string newurl = pre_url + "?" + params;
  logger->debugStream() <<"newurl: " <  return this->get_one_page(newurl);
  }

本文转自
http://epasser.aydc.com.cn/article/adp/2/content16989.html
原创粉丝点击