在开发过程中经常要访问第三方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://10.10.10.10:8080/user/getinfo 则会报错,需要做如下修改
在原%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字符,使用循环处理
}
假设我们已导入第三方的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
}
访问量: 509897
真棒,回来试试,感谢