idhttp 访问 https 的问题。

e8923704 CSDN会员 e8923704 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

TTestThread = class(TThread)
public
httpMain: TIdHTTP;
sslMain: TIdSSLIOHandlerSocketOpenSSL;
constructor Create; overload;
destructor Destroy; override;
procedure Execute; override;
end;

constructor TTestThread.Create;
begin
inherited Create(False);
httpMain := TIdHTTP.Create(nil);
sslMain := TIdSSLIOHandlerSocketOpenSSL.Create(nil);

sslMain.SSLOptions.Method := sslvSSLv3;
sslMain.SSLOptions.Mode := sslmUnassigned;
httpMain.AllowCookies := True;
httpMain.HandleRedirects := True;
httpMain.HTTPOptions := [hoKeepOrigProtocol, hoForceEncodeParams];
httpMain.ReadTimeout := 20000;
httpMain.ConnectTimeout := 10000;
end;

destructor TTestThread.Destroy;
begin
httpMain.Free;
sslMain.Free;
inherited Destroy;
end;

procedure TTestThread.Execute;
begin
while not Terminated do begin
httpMain.IOHandler := sslMain;
httpMain.Request.UserAgent := 'Mozilla/3.0 (compatible)';
httpMain.Get('https://mail.qq.com/cgi-bin/loginpage?');
end;

Destroy;
end;



如果我创建并执行50个线程(上面的代码),过一段时间会出现“Socket Error # 10038 Socket operation on non-socket.”。
如果出现了这个异常,这个 idhttp 将会彻底失效,get 将永远是“不能访问内存 000004” 什么的。
请问我应该如何避免这个异常(虽然上面的代码不容易出错,但如果使用代理连接,10038 异常会非常非常多)。

单线程执行上述代码永远不会出现 10038,即便使用代理连接。

各位大大们,指点我一下吧。
...全文
评论 5
收藏 已收藏
分享
返回顶部
e8923704 CSDN会员
Delphi 5,944 成员 262,941 内容