HISUI
Cache访问HTTPS服务
2021年02月09日 09时58分

Cache访问HTTPS服务

使用HTTP访问第三方请求

在开发过程中经常要访问第三方HTTP服务来获取数据。三方路径:http://10.10.10.10:8080/user/getinfo
使用M编写代码如下:

Set Req = ##class(%Net.HttpRequest).%New()
Set Req.Server = '10.10.10.10'
Set Req.Port = '8080'
Set Req.Timeout = 10 //设置超时时长为10秒
Set Flg = req.Post("/user/getinfo")
Set DataStream = Req.HttpResponse.Data
Write DataStream.Read(30000)   // 如超30000字符,使用循环处理

以上代码片段可以输出三方结果。

使用HTTPS访问第三方请求

如果第三方路径是https://10.10.10.10:8080/user/getinfo 则会报错,需要做如下修改

配置SSLConfigurations

  1. 进入CACHE的Portal,再进入[Home]>[Security Management]>[SSL/TLS Configurations]界面
  2. 新建SSLConfiguration
    NewSSLConfig

代码修改

在原%New.HttpRequest对象上增加二个属性

Set Req.Https = 1
Set Req.SSLConfiguration="DEFSSL"  //SSLConfig界面配置的名称

如果请求报以下错误

ERROR #6156: No match between server name '10.10.10.10' and SSL certificate values ''

%Net.HttpRequest对象还需要设置SSLCheckServerIdentity属性

Set Req.SSLCheckServerIdentity=0

得到HTTPS的全代码如下

ClassMethod ReqUserInfo(IsHttps=0){
    Set Req = ##class(%Net.HttpRequest).%New()
    Set Req.Server = '10.10.10.10'
    Set Req.Port = '8080'
    Set Req.Timeout = 10 //设置超时时长为10秒
    if (IsHttps) {
        If (IsHttps) {
            Set Req.Https = 1
            Set Req.SSLConfiguration="DEFSSL"  //SSLConfig界面配置的名称
            Set Req.SSLCheckServerIdentity = 0
        }
        Set Rtn = SoapObj.Hello()=0
    }
    Set Flg = req.Post("/user/getinfo")     //Flg为错误状态
    Set DataStream = Req.HttpResponse.Data
    Write DataStream.Read(30000)        // 如超30000字符,使用循环处理
}

对于第三方为WebService的服务同样适用

假设我们已导入第三方的WSDL后得到dhcserviceclient.MyServiceSoap代理类

ClassMethod ReqUserInfo(){
    Set SoapObj = ##class(dhcserviceclient.MyServiceSoap).%New()
    If (IsHttps) {
        Set SoapObj.Timeout = 10
        Set SoapObj.SSLConfiguration = "DEFSSL"
        Set SoapObj.SSLCheckServerIdentity = 0
    }
    Set Rtn = SoapObj.Hello()
    Quit Rtn
}
上一篇: 下一篇:

1条评论

  1. 那军路说道:

    真棒,回来试试,感谢

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

访问量: 379602