delphi idhttp发布相关问题 [英] delphi idhttp post related question

查看:77
本文介绍了delphi idhttp发布相关问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是delphi的新手.而且对于编程世界来说也几乎是新的.

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

我使用idhttp模块制作了一些简单的发布软件.

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.

如果帐户登录成功,它将返回一些源代码,其中包括"top.location ="

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

在源代码中,如果登录失败,则返回不包含"top.location ="

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

inside account.txt是第一个帐户,而第三个帐户是有效帐户

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

我不知道这是怎么回事

ph896011 pk1089

ph896011 pk1089

fsadfasdf dddddss

fsadfasdf dddddss

ph896011 pk1089

ph896011 pk1089

以下是delphi的来源

following is source of delphi

如果有人帮助我深表感谢!

if any one help me much apprecated!

unit Unit1;

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.

推荐答案

就在之前:

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

做:

sl.Clear;

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

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.

这篇关于delphi idhttp发布相关问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆