接收和提交COOKIE

下面是简单的介绍:
首先在Form上放idHttp, IdCookieManager,并将两者联系在一起
(通过idHttp的CookieManager),剩下的 你就专心实现你要完成
的东西就可以啦。
不知道你玩过KOK没有,下面的代码是登陆KOK注册页面的部分代码:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, IdCookieManager, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    http: TIdHTTP;
    CookieMngr: TIdCookieManager;
    edtUserName: TLabeledEdit;
    edtPassword: TLabeledEdit;
    btnLogin: TButton;
    Cookies: TMemo;
    Memo1: TMemo;
    btnInfor: TButton;
    Button1: TButton;
    edtSN: TLabeledEdit;
    procedure btnLoginClick(Sender: TObject);
    procedure btnInforClick(Sender: TObject);
   private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//这个函数是登陆页面,
procedure TForm1.btnLoginClick(Sender: TObject);
var
  s, s1: TStringStream;
  i: Integer;
begin
  s := TStringStream.Create('');
  s1 := TStringStream.Create('');
  try
   //{
    s.WriteString('action=LOGIN&gameSelect=gkk&');
    s.WriteString('acct=' + edtUserName.Text + '&');
    s.WriteString('pwd=' + edtPassword.Text);
    http.Request.ContentType := 'application/x-www-form-urlencoded';

    try
      http.Post('http://register.kok.com.cn/billing/servlet/walletServlet', s, s1)
    except
      http.Get(http.Response.Location, s1);
    end;
  //}
    Memo1.Lines.Text := s1.DataString;
//下面的是显示cookies信息的代码
    Cookies.Clear;
    for i := 0 to CookieMngr.CookieCollection.Count - 1 do
      Cookies.Lines.Add(CookieMngr.CookieCollection.Items.CookieText);
  finally
    s.Free;
    s1.Free;
  end;

end;
//这是KOK注册页面中,显示帐户信息的函数
procedure TForm1.btnInforClick(Sender: TObject);
var
  s, s1: TStringStream;
  i: Integer;
begin
{



}

  s := TStringStream.Create('');
  s1 := TStringStream.Create('');
  try
    s.WriteString('action=INFO');
    http.Request.ContentType := 'application/x-www-form-urlencoded';
    try
      http.Post('http://register.kok.com.cn/billing/servlet/walletServlet', s, s1)
    except
      http.Get(http.Response.Location, s1);
    end;
    Memo1.Lines.Text := s1.DataString;
    Cookies.Clear;
    for i := 0 to CookieMngr.CookieCollection.Count - 1 do
      Cookies.Lines.Add(CookieMngr.CookieCollection.Items.CookieText);
  finally
    s.Free;
    s1.Free;
  end;

end;

end.  
--------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
const
  DFW_LOGIN_URL = 'http://www.delphibbs.com/delphibbs/chkuser.asp';
  UserName = '你的用户名';
  Password = '你的密码';  //
var
  Params: TStrings;
  HTML: String;
begin
  Params:=TStringList.Create;
  try
    Params.Add('URL='+'/delphibbs/collections.asp');
    //登录成功后跳转到的URL,这里直接转到"我收藏的问题"
    Params.Add('QUERY_STRING=');  //登录成功后跳转URL的参数
    Params.Add('txtName='+UserName);
    Params.Add('txtPass='+Password);
    //Params.Add('chkSave=');  //是否记住我的密码

    IdHttp.HandleRedirects:=True;
    HTML:=IdHttp.Post(DFW_LOGIN_URL,Params);
    if Pos('',HTML)>0 then
      ShowMessage('登录失败!')   //登录失败则用户名为空
    else
      ShowMessage('登录成功!');
    //分析HTML,取出每一条收藏贴子的URL,下载保存
  finally
    Params.Free;
  end;
end;
--------------------------------------------------------------------------------
搞了几天,终于有了点眉目,以下是我登录一个asp站点的delphi程序,使用了IDHttp控件和IDCookieManager控件,在delphi7(带indy9)+win2k pro调试通过。

1、网站asp程序:
判断如果有cookie显示用户名和邮件;如果没有将获得的用户名和邮件写入cookie。
<%
if (request.Cookies("name")="" or request.Cookies("email")="") then

   Response.Cookies("name") = request("name")
        Response.Cookies("email") = request("email")
   Response.write(request("name")+","+request("email")+",写入cookie")
else
Response.write("Name:"+request.Cookies("name"))
Response.write("
email:"+request.Cookies("email"))
end if
%>

2、delphi form
object Form1: TForm1
  Left = 258
  Top = 154
  Width = 650
  Height = 388
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object btnLogin: TButton
    Left = 256
    Top = 24
    Width = 75
    Height = 25
    Caption = '提交'
    TabOrder = 0
    OnClick = btnLoginClick
  end
  object edtUserName: TLabeledEdit
    Left = 0
    Top = 24
    Width = 121
    Height = 21
    EditLabel.Width = 50
    EditLabel.Height = 13
    EditLabel.Caption = 'UserName'
    TabOrder = 1
    Text = 'yannqi'
  end
  object edtPassword: TLabeledEdit
    Left = 128
    Top = 24
    Width = 121
    Height = 21
    EditLabel.Width = 25
    EditLabel.Height = 13
    EditLabel.Caption = 'Email'
    TabOrder = 2
    Text = '[email protected]'
  end
  object Memo1: TMemo
    Left = 312
    Top = 64
    Width = 321
    Height = 281
    Lines.Strings = (
      'Memo1')
    TabOrder = 3
  end
  object Cookies: TMemo
    Left = 8
    Top = 64
    Width = 297
    Height = 281
    Lines.Strings = (
      'Cookies')
    TabOrder = 4
  end
  object btnInfor: TButton
    Left = 336
    Top = 24
    Width = 75
    Height = 25
    Caption = '测试'
    TabOrder = 5
    OnClick = btnInforClick
  end
  object Button3: TButton
    Left = 416
    Top = 24
    Width = 43
    Height = 25
    Caption = '清空'
    TabOrder = 6
    OnClick = Button3Click
  end
  object http: TIdHTTP
    MaxLineAction = maException
    ReadTimeout = 0
    AllowCookies = False
    ProxyParams.BasicAuthentication = False
    ProxyParams.ProxyPort = 0
    Request.ContentLength = -1
    Request.ContentRangeEnd = 0
    Request.ContentRangeStart = 0
    Request.ContentType = 'text/html'
    Request.Accept = 'text/html, */*'
    Request.BasicAuthentication = False
    Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
    HTTPOptions = [hoForceEncodeParams]
    CookieManager = CookieMngr
    Left = 120
    Top = 96
  end
  object CookieMngr: TIdCookieManager
    Left = 152
    Top = 96
  end
end

3、unit1。pas
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, IdCookieManager, IdBaseComponent,
  IdComponent, IdTCPConnection, IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    http: TIdHTTP;
    CookieMngr: TIdCookieManager;
    edtUserName: TLabeledEdit;
    edtPassword: TLabeledEdit;
    btnLogin: TButton;
    Cookies: TMemo;
    Memo1: TMemo;
    btnInfor: TButton;
    Button3: TButton;
    procedure btnLoginClick(Sender: TObject);
    procedure btnInforClick(Sender: TObject);
    procedure Button3Click(Sender: TObject);
   private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnLoginClick(Sender: TObject);
var
  s, s1: TStringStream;
  i: Integer;
begin
  s := TStringStream.Create('');
  s1 := TStringStream.Create('');
  try
    s.WriteString('name=' + edtUserName.Text + '&');
    s.WriteString('email=' + edtPassword.Text);
    http.Request.ContentType := 'application/x-www-form-urlencoded';

    try
      http.Post('http://localhost/cookietest.asp', s, s1)
    except
      http.Get(http.Response.Location, s1);
    end;
  //}
    Memo1.Lines.Text := s1.DataString;
//下面的是显示cookies信息的代码
    Cookies.Clear;
    Cookies.Lines.Add(inttostr(CookieMngr.CookieCollection.Count));
    for i := 0 to CookieMngr.CookieCollection.Count - 1 do
      Cookies.Lines.Add(CookieMngr.CookieCollection.Items.CookieText);
  finally
    s.Free;
    s1.Free;
  end;

end;

procedure TForm1.btnInforClick(Sender: TObject);
var
  s, s1: TStringStream;
  i: Integer;
begin
  s := TStringStream.Create('');
  s1 := TStringStream.Create('');
  try
    http.Request.ContentType := 'application/x-www';
    http.AllowCookies:=true;
    try
      http.Post('http://localhost/cookietest.asp', s, s1)
    except
      http.Get(http.Response.Location, s1);
    end;
    Memo1.Lines.Text := s1.DataString;
    Cookies.Clear;
    for i := 0 to CookieMngr.CookieCollection.Count - 1 do
      Cookies.Lines.Add(CookieMngr.CookieCollection.Items.CookieText);
  finally
    s.Free;
    s1.Free;
  end;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
cookies.Clear;
Memo1.Clear;
end;

end.

你可能感兴趣的:(DELPHI开发)