我在From里面放一个idHttp控件
然后这样使用得到网页内容:
FResult := IdHTTP1.Get(url?Username=XXX&Passwd=ZZZ);
if Pos('登陆失败!', FResult) > 0 then
begin
//密码错误,中止
Exit;
end;
FResult := IdHTTP1.Get(url); //这里必须登录之后才能得到我要的内容这样没有任何问题,能够得到正确的结果。
但现在我想把这个做到线程里面去,所以定义了一个线程:
THtmlMsg = class(TThread)
private
FResult : string;
IdHTTP: TIdHTTP;
protected
procedure Execute; override;
public
constructor Create;
destructor Destroy; override;
end;然后
constructor THtmlMsg.Create;
begin
inherited Create(False);
IdHTTP := TIdHTTP.Create(nil);
IdHTTP.HandleRedirects := True;
end;destructor THtmlMsg.Destroy;
begin
FreeAndNil(IdHTTP);
inherited;
end;但在Execute方法里使用就不对了: FResult := IdHTTP1.Get(url?Username=XXX&Passwd=ZZZ);
if Pos('登陆失败!', FResult) > 0 then
begin
//密码错误,中止
Exit;
end;
FResult := IdHTTP1.Get(url); //这里还是显示没有登录。
请教各位大侠这是怎么回事,如何解决呢?
然后这样使用得到网页内容:
FResult := IdHTTP1.Get(url?Username=XXX&Passwd=ZZZ);
if Pos('登陆失败!', FResult) > 0 then
begin
//密码错误,中止
Exit;
end;
FResult := IdHTTP1.Get(url); //这里必须登录之后才能得到我要的内容这样没有任何问题,能够得到正确的结果。
但现在我想把这个做到线程里面去,所以定义了一个线程:
THtmlMsg = class(TThread)
private
FResult : string;
IdHTTP: TIdHTTP;
protected
procedure Execute; override;
public
constructor Create;
destructor Destroy; override;
end;然后
constructor THtmlMsg.Create;
begin
inherited Create(False);
IdHTTP := TIdHTTP.Create(nil);
IdHTTP.HandleRedirects := True;
end;destructor THtmlMsg.Destroy;
begin
FreeAndNil(IdHTTP);
inherited;
end;但在Execute方法里使用就不对了: FResult := IdHTTP1.Get(url?Username=XXX&Passwd=ZZZ);
if Pos('登陆失败!', FResult) > 0 then
begin
//密码错误,中止
Exit;
end;
FResult := IdHTTP1.Get(url); //这里还是显示没有登录。
请教各位大侠这是怎么回事,如何解决呢?
begin
IdHTTP := TIdHTTP.Create(nil);
IdHTTP.HandleRedirects := True;
inherited Create(False);
//或者参数用True 加上下面的唤醒
//Self.Resume
FreeOnTerminate := True; //加上。
end;
使用HTTPCLI那个控件吧,用在线程里也比较稳定.