下面是簡單的介紹:
首先在
(通過idHttp的CookieManager),剩下的 你就專心實(shí)現(xiàn)你要完成
的東西就可以啦。
不知道你玩過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}
//這個函數(shù)是登陸頁面,
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注冊頁面中,顯示帳戶信息的函數(shù)
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');
//登錄成功后跳轉(zhuǎn)到的URL,這里直接轉(zhuǎn)到"我收藏的問題"
Params.Add('QUERY_STRING='); //登錄成功后跳轉(zhuǎn)URL的參數(shù)
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;
--------------------------------------------------------------------------------
搞了幾天,終于有了點(diǎn)眉目,以下是我登錄一個asp站點(diǎn)的delphi程序,使用了IDHttp控件和IDCookieManager控件,在delphi7(帶indy9)+win2k pro調(diào)試通過。
有不當(dāng)之處請指正,如轉(zhuǎn)載請注明作者:yannqi。
1、網(wǎng)站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
%>