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
{
}
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('
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("
email:"+request.Cookies("email"))
end if