网络之HTTP与WebService、FTP

一、WebService

1.提供WebService服务

1)创建%SOAP.WebService派生类,添加NAMESPACE、SERVICENAME

2)参考web.DHCANService

2.调用WebService

1)创建%SOAP.WebClient的派生类,添加LOCATION、NAMESPACE、SERVICENAME

web.DHCCLDevSoapInferface

2)参考 web.DHCCLDevSoapInferface

3)添加验证

a.HIS8.3后需要添加验证
do obj.WSSecurityLogin("webservice","webservice")
b.HIS8.5的均需求添加SSL验证

注意: HIS8.5的均需求添加SSL验证! URL地址由web/webservice改为: imedical/webservice

s obj.Location="https://192.168.165.24:1443/imedical/webservice/web.DHCANService.cls" 
set obj.SSLConfiguration="ANSSLConfiguration"
d obj.WSSecurityLogin("webservice","webservice")

注意:

调用时NAMESPACE双方需要一至

二、HTTP

1.HTTP服务端

1)获取GET、POST参数

%request会将get中的URL数据,表单数据转化为%request.Data数据,因此不必写代码分别处理

Write %request.Data("A",1)、


/// 前台调用时,根据方法或Query参数调用
/// 注: 当方法或Query的参数是JSON字符串时前台需要对传入JSON字符串,比如DHCBP.Register的Save方法
Class web.DHCCLMobileInferface Extends %CSP.Page
{

ClassMethod OnPreHTTP(ByRef OutputBody As %Boolean) As %Boolean
{
	/*星号表示所有的域都可以接受,*/
	Do %response.SetHeader("Access-Control-Allow-Origin","*")
	Do %response.SetHeader("Access-Control-Allow-Methods","GET,POST")
	Do %response.SetHeader("Access-Control-Allow-Headers","x-requested-with,content-type")
	// Do %response.SetHeader("Access-Control-Allow-Headers","x-requested-with,content-type")
	//Do %response.SetHeader("Content-Type","application/pdf")
	Quit 1
}

ClassMethod OnPage() As %Status
{
	try{
		
		s msgType=%request.Data("MsgType",1)
		s params=%request.Data("Params",1)
		s clsName=%request.Data("ClassName",1)

2.HTTP客户端

1).通过%Net.HttpRequest类Post JSON数据并获取数HTTP数据

ClassMethod Post(startDate, startTime, endDate, endTime)
{
	// s startDate="2018-08-16"
	// s startTime="06:59:19"
	// s endDate="2018-08-16"
	// s endTime="07:01:14"
	// w ##class(web.DHCANOPAttendance).Post(startDate, startTime, endDate, endTime)
	s startDatetime=startDate_" "_startTime
	s endDatetime=endDate_" "_endTime
	Set httprequest=##class(%Net.HttpRequest).%New()
    //set httprequest.SSLConfiguration="MySSLConfiguration"
    set httprequest.SSLCheckServerIdentity=0 ;旧的库需要添加
    set httprequest.Https=0
    set httprequest.Server="192.9.230.90"
    set httprequest.Port=8090
    // httprequest.InsertFormData("Content-Type","text/plain")
    d httprequest.ContentTypeSet("application/x-www-form-urlencoded; charset=UTF-8;text/plain")
    d httprequest.Head("Accept-Encoding","gzip,deflate,sdch")
    d httprequest.Head("Accept-Language","zh-CN,zh;q=0.8")
    s httprequest.ContentCharset="UTF-8"
    s semicolon=""""
    set requestData="{"_semicolon_"starttime"_semicolon_":"_semicolon_startDatetime_semicolon_","
    set requestData=requestData_semicolon_"endtime"_semicolon_":"_semicolon_endDatetime_semicolon_"}"
    d httprequest.EntityBody.Write(requestData)
    set tSc = httprequest.Post("/api/v2/transaction/get/?key=a702e2gxnd81gxruy_xigjb6pnwy5pmw5gn16thq1nor")
    s strRes=""
    do{
    s res=httprequest.HttpResponse.Data.ReadLine()
    s strRes=strRes_res
    }
    while(res'="")
    
    s strRes=$ZCONVERT(strRes,"I","JSON")
    quit strRes
    
    Quit httprequest.HttpResponse
}

2). 表单提交

    Set httprequest=##class(%Net.HttpRequest).%New()
    set httprequest.SSLConfiguration="MySSLConfiguration"
    set httprequest.Https=1
    set httprequest.Server="myserver.com"
    set httprequest.Port=443
    Do httprequest.InsertFormData("portalid","2000000")
    set tSc = httprequest.Post("/url-path/")
    Quit httprequest.HttpResponse

三、HTTPS
使用HTTPS前需要在 系统 > 安全管理 > SSL/TLS 配置 添加客户端的凭据

	Set httprequest=##class(%Net.HttpRequest).%New()
    set httprequest.SSLConfiguration="MySSLConfiguration"
    set httprequest.SSLCheckServerIdentity=0 ;旧的库需要添加
    set httprequest.Https=1
    set httprequest.Server="things.icoldchain.cn"
    set httprequest.Port=443

    Do httprequest.InsertFormData("code","1520437297405")
    Do httprequest.InsertFormData("deviceSN","B7ZAU040")
    set tSc = httprequest.Post("/output/getDeviceProperties")
    s strRes=""
    do{
	    s res=httprequest.HttpResponse.Data.ReadLine()
	    s strRes=strRes_res
    }
    while(res'="")
    
    s strRes=$ZCONVERT(strRes,"I","JSON")
    quit strRes
    
    Quit httprequest.HttpResponse

三、FTP

1.下载文件

    Set ftp=##class(%Net.FtpSession).%New()
	If 'ftp.Connect("TestMachine","ftp","username@domain.com") Write "Not connected",! Quit
	Write "Ftp server messsage:",!,ftp.ReturnMessage,!
	Set stream=##class(%GlobalCharacterStream).%New()
	If 'ftp.Binary() Write "Can not swap to binary mode",! Quit
	Write "Mode now: ",ftp.Type,!
	If 'ftp.Retrieve("test.exe",stream) Write "Failed to get file",! Quit
	Write "Length of file received: ",stream.Size,!
	If 'ftp.Logout() Write "Failed to logout",!
	Quit

2.上传文件

    Set ftp=##class(%Net.FtpSession).%New()
	If 'ftp.Connect("TestMachine","ftp","username@domain.com") Write "Not connected",! Quit
    Set filestream=##class(%FileBinaryStream).%New()
    Set sc=filestream.LinkToFile(dir_filename)
    If $$$ISERR(sc) do $System.Status.DisplayError(sc) quit $$$ERROR()
    
    //Uploaded file will have same name as the original
    Set newname=filename
    // 如果是传文件要切换到二进制模式
    w ftp.Binary()
    Set sc=ftp.Store(newname,filestream)
    If $$$ISERR(sc) do $System.Status.DisplayError(sc) quit $$$ERROR() 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值