delphi7中idhttp接收与提交cookie的问题

下面是简单的介绍:

首先在

(通过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.

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[i].CookieText);

finally

s.Free;

s1.Free;

end;

end;

//这是KOK注册页面中,显示帐户信息的函数

procedure TForm1.btnInforClick(Sender: TObject);

var

s, s1: TStringStream;

i: Integer;

begin

{

<form action=../servlet/walletServlet method=post>

<input type=submit value="修改个人资料">

<input type=hidden

</form>

}

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[i].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('<USER Name="" />',HTML)>0 then

ShowMessage(
'登录失败!') //登录失败则用户名为空

else

ShowMessage(
'登录成功!');

//分析HTML,取出每一条收藏贴子的URL,下载保存

finally

Params.Free;

end;

end;

 

--------------------------------------------------------------------------------

搞了几天,终于有了点眉目,以下是我登录一个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.
posted @ 2011-02-22 22:10  dwbboy  阅读(1248)  评论(0编辑  收藏  举报