如何在DELPHI中读取指定的Cookie文件中的内容

时间:2021-09-22 10:41:19
各位老大,江湖救急啊!

如何在DELPHI中读取指定的Cookie文件中的内容。
偶好象记得有这个对象的啊,可是找不到了。
注意,非Websnape。最好有注释和源代码!

3 个解决方案

#1


顶~

#2


以下链接有一篇十几页的英文文章,也许能救救你:
http://delphi.about.com/library/bluc/text/uc060901i.htm

#3


搞了几天,终于有了点眉目,以下是我登录一个asp站点的delphi程序,使用了IDHttp控件和IDCookieManager控件,在delphi7(带indy9)+win2k pro调试通过。

有不当之处请指正,如转载请注明作者:yannqi。

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("<br>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 = 'xayahe@163.com'
  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[i].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[i].CookieText);
  finally
    s.Free;
    s1.Free;
  end;

end;

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

end.

#1


顶~

#2


以下链接有一篇十几页的英文文章,也许能救救你:
http://delphi.about.com/library/bluc/text/uc060901i.htm

#3


搞了几天,终于有了点眉目,以下是我登录一个asp站点的delphi程序,使用了IDHttp控件和IDCookieManager控件,在delphi7(带indy9)+win2k pro调试通过。

有不当之处请指正,如转载请注明作者:yannqi。

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("<br>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 = 'xayahe@163.com'
  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[i].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[i].CookieText);
  finally
    s.Free;
    s1.Free;
  end;

end;

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

end.