delphi idhttp帖子相关问题

发布于 2024-09-02 08:37:59 字数 3369 浏览 6 评论 0原文

我是德尔福新手。对于编程世界来说也几乎是陌生的。

我使用 idhttp 模块制作了一些简单的帖子软件。

但当执行它时,它无法正常工作。

这个简单的程序是检查我的帐户状态。

如果帐户登录成功,它会返回一些源代码,其中在源代码中包含“top.location =”

,如果登录失败,它会返回

account.txt 中不包含的“top.location =”,这是第一个帐户,第三个帐户是激活帐户

,但仅是第一个帐户帐户可以检查,第一个帐户之后其他帐户无法检查

我不知道它有什么问题

ph896011 pk1089

fsadfasdf dddddss

ph896011 pk1089

以下是 delphi 源代码,

如果有人帮助我,非常感谢!

单位1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    IdCookieManager1: TIdCookieManager;
    lstAcct: TListBox;
    result: TLabel;
    Edit1: TEdit;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    //procedure FormCreate(Sender: TObject);
    //procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    AccList: TStringList;
    IdCookie: TIdCookieManager;
    CookieList: TList;
    StartCnt: Integer;
    InputCnt: Integer;
    WordList: TStringList;
    WordNoList: TStringList;
    WordCntList: TStringList;
    StartTime: TDateTime;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var

  i: Integer;
  //temp: String;
  lsttemp: TStringList;
  sl : tstringlist;
  //userId,userPass: string;
begin
  InputCnt:= 0;
  WordList := TStringList.Create;
  CookieList := TList.create;
  IdCookie := TIdCookieManager.Create(self);


  if FileExists(ExtractFilePath(Application.ExeName) + 'account.txt') then
    WordList.LoadFromFile(ExtractFilePath(Application.ExeName) + 'account.txt');

  WordNoList:= TStringList.Create;
  WordCntList := TStringList.Create;
  lsttemp := TStringList.create;
  sl :=Tstringlist.Create;
try
  try
    for i := 0  to  WordList.Count -1 do
    begin
      ExtractStrings([' '], [' '], pchar(WordList[i]), lsttemp);
      WordNoList.add(lsttemp[0]);
      //ShowMessage(lsttemp[0]);
      WordCntList.add(lsttemp[1]);
      //ShowMessage(lsttemp[1]);

      sl.Add('ID='+ lsttemp[0]);
      sl.add('PWD=' + lsttemp[1]);
      sl.add('SECCHK=0');
      IdHTTP1.HandleRedirects := True;
      IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
      memo1.Text:=idhttp1.Post('http://user.buddybuddy.co.kr/Login/Login.asp',sl);

      if pos('top.location =',Memo1.Text)> 0 then

       begin
        application.ProcessMessages;
       ShowMessage('Alive Acc!');
        //result.Caption := 'alive acc'  ;
        sleep(1000);
        Edit1.Text := 'alive acc';
        lsttemp.Clear;
        Memo1.Text := '';
        //memo1.Text := IdHTTP1.Get('https://user.buddybuddy.co.kr/Login/Logout.asp');
        Sleep(1000);
       end;


      if pos('top.location =', memo1.Text) <> 1 then

      begin
      application.ProcessMessages;
      ShowMessage('bad');
      Edit1.Text := 'bad';
      //edit1.Text := 'bad';
      lsttemp.Clear;
      memo1.Text := '';
      sleep(1000) ;
      end;
      Edit1.Text := '';
    end;

  finally
    lsttemp.free;
  end;
  StartCnt := lstAcct.items.Count;
  StartTime := Now;

finally
  sl.Free;
end;
end;



end.

im new to delphi. and also almost new to programming world.

i was made some simple post software which using idhttp module.

but when execute it , it not correctly working.

this simple program is check for my account status.

if account login successfully it return some source code which include 'top.location ='

in source, and if login failed it return not included 'top.location ='

inside account.txt is follow first and third account was alived account

but only first account can check, after first account other account can't check

i have no idea what wrong with it

ph896011 pk1089

fsadfasdf dddddss

ph896011 pk1089

following is source of delphi

if any one help me much apprecated!

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    Memo1: TMemo;
    IdCookieManager1: TIdCookieManager;
    lstAcct: TListBox;
    result: TLabel;
    Edit1: TEdit;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    //procedure FormCreate(Sender: TObject);
    //procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    AccList: TStringList;
    IdCookie: TIdCookieManager;
    CookieList: TList;
    StartCnt: Integer;
    InputCnt: Integer;
    WordList: TStringList;
    WordNoList: TStringList;
    WordCntList: TStringList;
    StartTime: TDateTime;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var

  i: Integer;
  //temp: String;
  lsttemp: TStringList;
  sl : tstringlist;
  //userId,userPass: string;
begin
  InputCnt:= 0;
  WordList := TStringList.Create;
  CookieList := TList.create;
  IdCookie := TIdCookieManager.Create(self);


  if FileExists(ExtractFilePath(Application.ExeName) + 'account.txt') then
    WordList.LoadFromFile(ExtractFilePath(Application.ExeName) + 'account.txt');

  WordNoList:= TStringList.Create;
  WordCntList := TStringList.Create;
  lsttemp := TStringList.create;
  sl :=Tstringlist.Create;
try
  try
    for i := 0  to  WordList.Count -1 do
    begin
      ExtractStrings([' '], [' '], pchar(WordList[i]), lsttemp);
      WordNoList.add(lsttemp[0]);
      //ShowMessage(lsttemp[0]);
      WordCntList.add(lsttemp[1]);
      //ShowMessage(lsttemp[1]);

      sl.Add('ID='+ lsttemp[0]);
      sl.add('PWD=' + lsttemp[1]);
      sl.add('SECCHK=0');
      IdHTTP1.HandleRedirects := True;
      IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded';
      memo1.Text:=idhttp1.Post('http://user.buddybuddy.co.kr/Login/Login.asp',sl);

      if pos('top.location =',Memo1.Text)> 0 then

       begin
        application.ProcessMessages;
       ShowMessage('Alive Acc!');
        //result.Caption := 'alive acc'  ;
        sleep(1000);
        Edit1.Text := 'alive acc';
        lsttemp.Clear;
        Memo1.Text := '';
        //memo1.Text := IdHTTP1.Get('https://user.buddybuddy.co.kr/Login/Logout.asp');
        Sleep(1000);
       end;


      if pos('top.location =', memo1.Text) <> 1 then

      begin
      application.ProcessMessages;
      ShowMessage('bad');
      Edit1.Text := 'bad';
      //edit1.Text := 'bad';
      lsttemp.Clear;
      memo1.Text := '';
      sleep(1000) ;
      end;
      Edit1.Text := '';
    end;

  finally
    lsttemp.free;
  end;
  StartCnt := lstAcct.items.Count;
  StartTime := Now;

finally
  sl.Free;
end;
end;



end.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无人问我粥可暖 2024-09-09 08:37:59

之前:

sl.Add('ID='+ lsttemp[0]);

执行:

sl.Clear;

在第一次运行时,您的“SL”包含两个 POST 参数,但除非您在第二次运行时清除它,否则您将继续添加参数,从而使您尝试连接的 HTTP 服务器感到困惑!

这可能不是您唯一的问题,但这肯定是问题之一。

Right before:

sl.Add('ID='+ lsttemp[0]);

Do:

sl.Clear;

On the first run your "SL" holds the two POST parameters, but unless you clear it on the second run, you just keep adding parameters, confusing the HTTP server you're trying to connect to!

That might not be your only problem, but that's surely one of the problems.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文