飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3906|回复: 1

软件登录软件 DIY

[复制链接]
  • TA的每日心情
    开心
    2019-9-19 16:05
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2007-2-8 11:28:40 | 显示全部楼层 |阅读模式
        Http 协议是 Web 服务的主要协议之一,网页的浏览和网站动态数据的提交就是由这个协议实现的。实现的过程是通过 Http 会话,向 Web 服务器进行数据请求(读取、存储等)。
        我们编程中常用的有 POST 和 GET 数据请求。POST 可以用于把用户输入的数据以数据流的方式传给 CGI(ASP、JSP) 程序,CGI 再通过 Contect-Length 环境变量来取相应长度的数据流信息。如果数据提交成功,服务器将产生正常应答,其头部信息为:
      HTTP/1.1 200 OK
        网站登录是通过用户填写登录信息,由 CGI 程序向 Web 服务器提交来实现的。以 Sohu 网站的免费网站提交为例:首先由 Sohu 主页面进入网站登录界面,选择网站的登录类别,然后填写网站的信息:这个过程由 2 步组成,第一步填写网站的名称和网站地址(http://…),第二步填写一些详细信息,然后就可以提交了。真正实现数据保存的是第二步,其核心网页代码(简化)为:
        <form name="form1" method="POST"
            action="/regurl/regform.asp?Step=Create&Class=C016015005002
            &sitename=网站名称&url=http://网站地址"
            onsubmit="return checkform()">
          <input type="hidden" name="Step" value="Create">
          网站描述:
          <textarea name="Description" rows="2" cols="60"></textarea>
          ……
        </form>
        (注:C016015005002 因选择的网站类别而不同)
        我们的程序就是通过利用经过 Delphi 完美封装的 TNMHttp 组件,模拟网页中的按钮 Submit 提交,来实现用程序代码进行网站的快速、准确注册。
        本例中,笔者的程序可以圆满的完成网站“十万个为什么”(http://helps100000.yeah.net)的登录,登录在“首页>公司企业>计算机与互联网>计算机软件>数据库”类目下。程序的界面组件为:1 个 WebBrowser 组件,3 个 Memo 组件,分别用来显示登录后的反馈页面和一些提示信息。1 个 NMHTTP1 组件,是本程序的核心组件。还有一个 Button 按钮。
        其实程序的核心代码也就一句:
          NMHTTP1.Post('http://db.sohu.com/regurl/regform.asp?
            Step=Create&Class=C016015005002&sitename=十万个为什么
            &url=http://helps1000000.yeah.net','PostData.txt');
        其中,Post 方法有 2 个参数,第 1 个参数代表 form 表单的 action 部分,第 2 个参数是 <input> 标签中各参数的取值组成的字符串。由于 NMHTTP1 的 OutputFileMode 属性被设置为 true,所以第 2 个参数的字符串被放在一个外部文本文件 PostData.txt 中,PostData.txt 的内容为(不分行):
        Description=探讨计算机技术收集应用技巧&Keywords=计算机技巧
        &district=山系&city=西安&Contact=张庆&[email protected]&memo=no
    该字符串是通过分析网页代码得到的。
        程序运行后,点击“网站注册”按钮,如果机器已经连接到 Internet 上,就会像在网页中进行网站注册一样,很快在 WebBrowser1 中返回“注册成功”或“错误:该网站已经注册”页面。
        本程序在 Windows98、IE5.0、Delphi5.0 环境下调式成功。我们完全可以在此基础上,运用多线程等技术,做成一个类似“登录骑兵”一类的实用软件。
    //程序的完整源代码如下:
      unit Unit1;
      interface
      uses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls, OleCtrls, SHDocVw, Psock, NMHttp, ExtCtrls;
      type
      TForm1 = class(TForm)
      NMHTTP1: TNMHTTP;
      Panel1: TPanel;
      Button1: TButton;
      Memo3: TMemo;
      Memo2: TMemo;
      Memo1: TMemo;
      Panel2: TPanel;
      WebBrowser1: TWebBrowser;
      procedure Button1Click(Sender: TObject);
      procedure NMHTTP1Success(Cmd: CmdType);
      procedure NMHTTP1Failure(Cmd: CmdType);
      procedure FormCreate(Sender: TObject);
      private { Private declarations }
      public { Public declarations }
      end;
      var
      Form1: TForm1;
      implementation
      {$R *.DFM}
      procedure TForm1.FormCreate(Sender: TObject);
      begin
      WebBrowser1.Navigate('about:blank');
      end;

      procedure TForm1.Button1Click(Sender: TObject);
      begin
      With NMHTTP1 do
      Begin
      InputFileMode :=False;
      OutputFileMode :=True;
      ReportLevel :=Status_Basic;
      end;
      With NMHTTP1.HeaderInfo do
      begin
      Cookie :='';
      LocalMailAddress :='';
      LocalProgram :='';
      Referer :='';
      UserID :='';
      Password :='';
      try
      NMHTTP1.Post('http://db.sohu.com/regurl/regform.asp?
      Step=Create&Class=C016015005002&sitename=十万个为什么
      &url=http://helps1000000.yeah.net','PostData.txt');
      except
      showMessage(' Error! ');
      end;
      End;
      end;

      procedure TForm1.NMHTTP1Success(Cmd: CmdType);
      begin
      Case Cmd of
      CmdPOST:
      begin
      Memo1.Text := NMHTTP1.Header;
      Memo2.Text := NMHTTP1.Body;
      WebBrowser1.OleObject.document.body.innerHTML :=NMHTTP1.Body;
      Memo3.Lines.Add('HTTP POST Successful');
      end;
      end;
      end;

      procedure TForm1.NMHTTP1Failure(Cmd: CmdType);
      begin
      Memo1.Text := NMHTTP1.Header;
      Memo2.Text := NMHTTP1.Body;
      case Cmd of
      CmdPOST:
      Memo3.Lines.Add('HTTP Post Failed');
      end;
      end;
      end.
        ------------------------------------------------
        张庆(西安 Net-e 软件系统工程公司)
        Email: [email protected]
        http://soft.why100000.com
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2023-3-14 15:11
  • 签到天数: 465 天

    [LV.9]以坛为家II

    发表于 2010-12-3 14:59:51 | 显示全部楼层
    怎么没一个人顶一下呢!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表