1.delphi 谁帮我翻译下这段代码——高分
delphi 谁帮我翻译下这段代码——高分
//是多线i多.net mvc源码分析个基于多线程的模拟浏览器的 Get 和Post 方法的类,具体我也不大清楚,,
//也只能大概说说了.
unit web;
interface
uses
Classes,IdHTTP,SysUtils,IdCookieManager,IdMultipartFormData
,windows;
//类的声明
type
TWeb = class(TThread)
private
protected
procedure Execute; override; //重写父类TThread的Exeecute方法.
public
mode: Integer; //标志位:根据这个判断是Get还是Post
url: string; //Url地址
idhttp: TIDHttp; //Indy 的http组件
sl: TStringList;
mpfDS: TIdMultiPartFormDataStream; //用这个控件实现 Stream的提交方法的.
flag: Boolean; //标志位,代码没有读懂,不知道是控制什么状态的
err,html: string;
stm: TMemoryStream;
constructor create; //构建函数
end;
implementation
//构造函数 ,全是初始化声明的类,没啥好说的.
constructor TWeb.create;
begin
idhttp := TIDHttp.Create(nil);
idhttp.CookieManager := TIDCookieManager.Create(idhttp);
sl := TStringList.Create();
mpfDS := TIdMultiPartFormDataStream.Create();
stm := TMemoryStream.Create();
FreeOnTerminate := True; //这也是个标志位: 当中断时候释放
inherited Create(True);
end;
//重写父类TThread的Exeecute方法.
procedure TWeb.Execute;
begin
while not Terminated do
begin
Sleep();
if Suspended then continue; //不懂,估计是多线程的同步处理?
flag := True;
err := '';
html := '';
//根据mode判断执行的功能 1 :Get文本 2:Get 流 3 提交数组ts是上面定义的一个数组 4 提交Stream,估计是提交类似,文件一类的东西
Case mode of //1:get text 2:get stream 3:post ts 4:post mpfDS
1:
begin
try
html := idhttp.Get(url); //这个用Indy的idhttp 获取URL地址的内容.文本方式.
except
on e:exception do begin
flag := False;
err := e.Message;
end;
end;
end;
2:
begin
stm.Clear();
try
idhttp.Get(url,stm); //用Indy的idhttp 获取URL内容 ,Stream方式
except
on e:exception do begin
flag := False;
err := e.Message;
end;
end;
end;
//也是用Indy的idhttp实现提交功能, 没时间详细些了,lz可以查看INDY组件IDHTTP的控件的详细使用方法.
//可以hi我再进行交流...
3:
begin
try
html := idhttp.Post(url,sl);
except
on e:exception do begin
flag := False;
err := e.Message;
end;
end;
end;
4:
begin
try
html := idhttp.Post(url,mpfDS);
except
on e:exception do begin
flag := False;
err := e.Message;
end;
end;
end;
5:
begin
idhttp.Request.ContentType := 'application/x-www-form-urlencoded';
try
html := idhttp.Post(url,stm);
except
on e:exception do begin
flag := False;
err := e.Message;
end;
end;
end;
end;
if (html<>'') and (Pos('utf',LowerCase(idhttp.Response.ContentType))>0) then
html := Utf8Decode(html);
Suspended := True;
end;
idhttp.Free();
sl.Free();
mpfDS.Free();
stm.Free(); //释放...
end;
end.