• ASP如何调用Delphi开发的DataSnap/Restful接口服务


        前面博主有一篇文章讲述了ASP如何调用Delphi开发的WebService服务,见:http://blog.csdn.net/xieyunc/article/details/57129936
        日前,见有网友留言提问如何调用Delphi开发的DataSnap/Restful接口服务,在此特写一篇文章算是作一统一回复吧。尽管此文是使用ASP调用Delphi开发的DataSnap/Restful接口服务,但对其它语言编写的DataSnap/Restful接口服务,或者用其他脚本语言如PHP、ASP.NET调用同样适用。
        本例中使用了博主开发的一个电控接口服务程序,其中有一个接口函数是获取校区信息的,其原型为:

    //获取接口服务器所在的校区信息,KeyNumber为通讯密钥,如何密钥验证失败,返回-1 
    function GetXQList(const KeyNumber:string):string;

        本例的校区信息表中有一条记录:

    RestfulSrv.asp文件:

    <%
    Dim WebSrv,WebSrvUrl,KeyNumber
    WebSrv="localhost:8019"	'提供RESTful服务的服务器,格式:IP:Port
    'WebSrvUrl="http://"&WebSrv&"/peci/rest/TServerMethods/GetXQList/密钥字符串"	'必须是绝对地址,不能是相对地址,这一点与WebService不一样。
    WebSrvUrl="http://"&WebSrv&"/peci/rest/TServerMethods/"	'必须是绝对地址,不能是相对地址,这一点与WebService不一样。
    KeyNumber="91F11212729292F2136DADEAE457CEBD3656B6CECECECD3145474855B6aAA"	'//KeyNumber为通讯密钥字符串,作为函数的参数传递
    
    Function GetXQList(sResult)
    	'GetXQList函数返回校区信息,返回的信息是一个表数据,但是在输出时已转化为JSON格式,数组形式,其原型为:
    	'//获取接口服务器所在的校区信息
        'function GetXQList(const KeyNumber:string):string;//KeyNumber为通讯密钥字符串
    
    	Set xmlhttp = server.CreateObject("Msxml2.XMLHTTP")
    	sUrl=WebSrvUrl&"GetXQList"&"/"&KeyNumber 	'必须是绝对地址,不能是相对地址,这一点与WebService不一样。
    	xmlhttp.Open "GET",sUrl,false
    	xmlhttp.setRequestHeader "HOST",WebSrv
    	xmlhttp.setRequestHeader "Content-Type", "text/xml;charset='utf-8'"
    	xmlhttp.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    	xmlhttp.setRequestHeader "User-Agent", "CodeGear SOAP 1.3"
    	xmlhttp.setRequestHeader "Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
    	xmlhttp.setRequestHeader "Accept-Language","utf-8;zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3"
    	xmlhttp.setRequestHeader "Accept-Encoding","gzip, deflate"
    	xmlhttp.setRequestHeader "Connection","keep-alive"
    	xmlhttp.setRequestHeader "Cache-Control", "no-Cache"
    	xmlhttp.Send(null)
    
    	'Response.Write sUrl
    	'Response.Write xmlhttp.Status&"|"&xmlhttp.StatusText&"<br />"
    	'Response.Write xmlhttp.responsetext
    	'Response.End()
    
    	If xmlhttp.Status = 200 Then
    		GetXQList="true"
    		sResult=xmlhttp.ResponseText
    	Else
    		GetXQList="false"
    		'Response.Write xmlhttp.Status&" "
    		sResult=xmlhttp.StatusText
    	End if
    
    	Set xmlhttp = Nothing
    End Function
    
    %>
    
    

        其中最关键是如何获取获取完整的请求头信息,因在XE中已经没有了Delphi2007及之前版本中很方便进行WEB调试的工具---【Web App Debug】,故找了一个网络抓包工具获取完整的网页请求头信息,我使用的抓包工具是【HTTP Analyzer】,当然也可以直接使用FireFox浏览器的Debug功能--查看元素,在浏览器地址栏中直接输入如下信息:http://localhost:8019/peci/rest/TServerMethods/GetXQList/密钥字符串

        从上图中可以看到Restful接口服务执行成功并返回了正确的结果,此时在Firefox调试环境中可以看到此页面的请求头,如下图:

        但是这个请求头并不完整,因为缺少了一项Request-Line的内容,导致我不知道如何构建Open语句,而这一点,在【HTTP Analyzer】工具中就非常清楚,其实Request-Line的内容就是xmlhttp.Open中需要的请求地址,且必须是绝对地址,本来Request-Line=URL-HOST,但是在Restful的请求头中Resquest-Line必须是URL的完整内容即绝对地址,当然如果知道URL、HOST和Request-Line之间的关系之后,【HTTP Analyzer】工具也就可有可无了,如下图:


    Test.asp测试文件:
    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
    <%Session.CodePage=65001%>
    <%Response.charset="utf-8"%>
    <!-- #include file="restfulsrv.asp"-->
    <%
    	Dim sStatus,sResult
    	sResult = ""
    	
    	Response.Write "执行<br />"
    	Response.Write "sStatus=GetXQList(sResult)"
    	Response.Write "<br />结果:<hr />"
    
    	sStatus=GetXQList(sResult)
    	Response.write "sStatus="&sStatus&"<br />"
    	If sStatus="true" Then
    		Response.write "执行成功!返回结果为:<br />"&sResult
    	else
    		Response.write "执行失败!返回结果为:<br />"&sResult
    	End If
    %>
    
    Test.asp执行结果为:

    密钥不正确时的执行结果:


    源代码测试下载:http://download.csdn.net/download/xieyunc/9838759


  • 相关阅读:
    spring-session+Redis实现Session共享
    SQLServer语法常用总结
    [PDFBox]后台操作pdf的工具类
    类加载器
    SQLServer常用分页方式
    Tesseract识别图片提取文字&字库训练
    AbstractQueuedSynchronizer的简单介绍
    CountDownLatch 闭锁、FutureTask、Semaphore信号量、Barrier栅栏
    Java线程实现的第三种方式Callable方式与结合Future获取返回值
    原子类型的使用&Unsafe&CAS
  • 原文地址:https://www.cnblogs.com/xieyunc/p/9126492.html
Copyright © 2020-2023  润新知