我正在尝试使用 OpenEdge.Net.pl 通过 https 进行呼叫,并且收到下一条错误消息:
安全套接字层 (SSL) 故障。错误代码 17424:SSL 例程 (9318)
我已经阅读了一段时间,我遇到的问题与我指向的 URL 有多个子域有关,例如:
api.exampleurl.com、dev.exampleurl.com...
根据我所看到和测试的情况,使用 ClientLibraryBuilder 类中的 'ServerNameIndicator' 参数我可以解决这个问题。事实上,在我的本地安装中,版本 12+ 可以工作。问题是,在我需要实现此功能的服务器中,安装的版本是 11.7.4,从我所见,尽管文档说它是在 11.3+ 版本中实现的,但此参数不存在于那个版本,因为当检查我的代码时,它会用下一条消息警告我:
无法在“OpenEdge.Net.HTTP.Lib.ClientLibraryBuilder”类中找到元素“ServerNameIndicator”。 (12927)
我还尝试添加 sslVerifyHost(FALSE) 参数,但它似乎根本没有做任何事情。
USING Progress.Json.ObjectModel.*.
USING OpenEdge.Net.HTTP.*.
USING OpenEdge.Net.HTTP.Lib.*.
USING OpenEdge.Net.URI.
DEFINE VARIABLE oPayload AS JsonObject NO-UNDO.
DEFINE VARIABLE oURI AS URI NO-UNDO.
DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO.
DEFINE VARIABLE oLib AS IHttpClientLibrary NO-UNDO.
DEFINE VARIABLE oClient AS IHttpClient NO-UNDO.
DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO.
oURI = NEW URI( 'https', 'api.exampleurl.com' ).
oURI:Path = '/custom/path'.
oPayload = NEW JsonObject().
oPayload:Add("data","example data").
oRequest = RequestBuilder:POST(oURI, oPayLoad):Request.
oLib = ClientLibraryBuilder:Build()
:sslVerifyHost(NO)
:ServerNameIndicator('api.exampleurl.com')
:LIBRARY.
oClient = ClientBuilder:Build()
:UsingLibrary( oLib )
:Client.
oResponse = oClient:Execute( oRequest ).
如何绕过此错误? 有没有其他方法可以在不出现此问题的情况下执行对 URL 的请求?
提前致谢。
TL;DR 是您应该确保安装了 OpenEdge.Net.pl 文件的正确版本。