小编spl*_*lrk的帖子

在不同线程中使用时 OverbyteICS HTTP 超时

我已经尝试找出这个错误大约四天了。我正在使用 Delphi XE,并创建了一个小工具供翻译人员使用。我想到了使用 Microsoft Translation API 来帮助让事情变得更轻松并且不那么乏味。

我创建了一个访问 Microsoft 翻译器 API 的类,但我想使其成为线程安全的,以便可以在后台发出请求。我发送获取访问令牌的请求没有问题,但是,我在单独的线程中运行该请求。当用户单击按钮时,我会生成一个新线程并运行 http 请求来翻译其中的术语。然而,它每次都会超时。如果我从同一个线程运行它就没有问题。

这是我用于发送http请求的方法(传递的THttpCli对象在线程之间共享)

function sendHTTPRequest(APost: Boolean; AURI: UTF8string;
  AContentType: UTF8string; APostData: UTF8String; AHttpCli: TSSLHttpCli): UTF8string;
var
  DataOut: TMemoryStream;
  DataIn: TMemoryStream;
  lHTMLStream: TStringStream;
  lencoding: TUTF8Encoding;
  lownClient: boolean;
begin

  lownClient := false;
  if AHttpCli = nil then
  begin
    AHttpCli := TSSLHttpCli.Create(nil);
    AHttpCli.SslContext := TSSLContext.Create(nil);
    with AHttpCli.SslContext do
    begin
      SSLCipherList := 'ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH';
      SSLVersionMethod := sslV23_CLIENT;
      SSLVerifyPeerModes := [SslVerifyMode_PEER]
    end;
    AHttpCli.MultiThreaded := true;
    lownClient := true;
  end;

  AHttpCli.Accept := 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';

  if APost …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading timeout http delphi-xe

5
推荐指数
1
解决办法
829
查看次数

标签 统计

delphi ×1

delphi-xe ×1

http ×1

multithreading ×1

timeout ×1