使用IDHTTP,会时不时出现访问不到目标网址的事,而这时用其他浏览器却能正常访问,与useragent无关,因为几秒钟前还能访问。
这时,再多次访问,也不行,包括使用动态创建的IDHTTP,每用一次FREE掉或用一个静态的IDHTTP,每次DISCONNECT;必须将程序关闭,重运行,才能再次访问,请问这是怎么回事,有什么解决办法?
这时,再多次访问,也不行,包括使用动态创建的IDHTTP,每用一次FREE掉或用一个静态的IDHTTP,每次DISCONNECT;必须将程序关闭,重运行,才能再次访问,请问这是怎么回事,有什么解决办法?
如果你用idhttp.get网址的时候,它正好没多出这些字符串,那么你就可以访问到,否则你就不会访问到!
不知是不是这个原因!
调用了的,甚至有个模块是动态创建的IDHTTP,每次GET后都FREE了IDHTTP的
function HttpGet(idhttp:tidhttp;url,cookies:widestring;var html:string):boolean;
begin
result:=true;
try
idhttp.Disconnect;
except
end;
idhttp.HandleRedirects:=true;
idhttp.AllowCookies:=false;
idhttp.HTTPOptions:=[hoForceEncodeParams];
idhttp.OnStatus:=frm_work.HttpStatus;
idhttp.OnWork:=frm_work.HttpWork;
idhttp.OnWorkBegin:=frm_work.HttpWorkBegin;
idhttp.OnDisconnected:=frm_work.HttpDisconnected;
idhttp.Port:=80;
idhttp.ReadTimeout:=1000*c_timeout; idhttp.Request.UserAgent:=DataBase.userAgent;
idhttp.Request.Referer:=url;
idhttp.Request.CustomHeaders.Clear;
idhttp.Request.CustomHeaders.Append(cookies); httpproxyinit(idhttp);
try if stopaction(orderstop) then
begin
result:=false;
exit;
end;
timeoutstart;
try
html:=idhttp.get(EnURLstr(url));
except
html:='';
result:=false;
end;
finally
idhttp.Disconnect;
timeoutend;
end;
end;
动态创建的时候指定为Create(nil),然后自己释放
从你的代码看你没有释放 http,我一直都用先创建再释放的方法,没有问题。注意:释放的不是连接,而是对象。试试改成下面的吧:
idHttp := TIdHTTP.Create;
....
你的代码
...
idHttp.Free;
....
HttpGet(idhttp,url,cookies,html);
...
idHttp.Free;