【发布时间】:2018-06-28 19:30:24
【问题描述】:
我正在尝试使用 Delphi 5 通过 TIdHTTP (Indy) 在 Web 服务上发布,每当我调用 post 方法时,它都会返回“错误连接 SSL 错误”异常。
这是我要运行的代码
FHandle := TIdSSLIOHandlerSocket.Create(nil);
FHandle.SSLOptions.Method := sslvTLSv1;
IdHttp.IOHandler := FHandle;
IdHttp.HandleRedirects := True;
IdHTTP.Request.CustomHeaders.Add('Content-Type: application/json');
IdHttp.Request.ContentType := 'application/json';
Load();
vAux := TMemoryStream.Create();
try
WriteStringToStream(vAux, edJson.Text);
vAux.Position := 0;
vRet := IdHTTP.Post(edHost.Text, vAux);
finally
vAux.Free();
end;
似乎无论我在 CustomHeaders 或任何其他属性中进行什么更改,都会发生相同的错误。
我尝试将 de SSLOption.Method 更改为所有可用的,但我无法让它工作。
有什么建议让我试试?
【问题讨论】:
-
提高冗长性?相同的代码是否适用于另一台服务器?其他客户端是否与您的应用程序查询的服务器在同一台服务器上工作?
-
我没有放任何这些,因为我无法准确回答。我在其他服务器上尝试了相同的代码并且它可以工作,但我认为这不是一个可靠的信息,因为它是一个完全不同的场景。是的,其他客户可以在同一台服务器上发帖,因为我正试图在一家国家公司的 API 上发帖
-
因此您需要获取有关异常的更多详细信息...因为存在大量可能的 TLS 错误,从证书/CA 不匹配开始...如果您提供了您尝试访问的远程 URL也许其他人可以尝试为您提供见解。
-
现在很多网站都放弃了对 TLS 1.0 的支持,现在需要 TLS 1.1+。您正在使用不支持 TLS 1.1+ 的 Indy 9。您可能需要升级到 Indy 10 才能做您想做的事。附带说明,不要使用
CustomHeaders属性发送Content-Type标头,只能使用Request.ContentType属性。您正在向服务器发送 2 个Content-Type标头,这可能会使其混淆。 -
感谢您的旁注,请记住这一点。我刚刚尝试在 Delphi XE7 上的测试应用程序上运行相同的代码,并且所有可用版本都存在错误。
标签: delphi indy delphi-5 idhttp