XMLHTTPRequest、IDHTTP、SQLConnection访问DataSnap/Restful接口服务演示程序
来源:互联网 发布:unity3d 过山车 编辑:程序博客网 时间:2024/05/29 20:01
虽然本Demo是用Delphi写的,但是因为XMLHTTPRequest是一种通用技术,故同样适合其他常见的程序语言和脚本语言,如Java、js、php、C#、ASP.NET、ASP、Perl等等。
先看DEMO运行效果:
一、通过XMLHTTPRequest方式调用接口服务:
后台数据库对应的数据:
本操作的单击事件代码为:
procedure TTestForm.ExecServerMethodByXMLHttp(const useGet: Boolean);var url,UsrPwd_Base64: string; myXMLHTTP:IXMLHTTPRequest; JsonParamStr:string;begin Memo1.Clear; Memo1.Lines.Add('XMLHTTPRequest '+RadioGroup1.Items[RadioGroup1.ItemIndex]+'方式:'); Memo1.Lines.Add('执行状态:'); Memo2.Clear; Memo2.Lines.Add('XMLHTTPRequest '+RadioGroup1.Items[RadioGroup1.ItemIndex]+'方式:'); Memo2.Lines.Add('返回结果:'); myXMLHTTP := CoXMLHTTP.Create;//早期版本如Delhp7中则为 myXMLHTTP := CoXMLHTTPRequest.Create; //两种提交请求的方式:Get和Post,Get是通过URL地址传递参数如果是中文需要转码,需要添加时间戳 Post不需要添加时间戳 //get url := 'http://localhost:5269/api/webmemberapi/NewMemberRegister?timestamp='+inttostr(Windows.GetTickCount); //DELPHI生成的Restful服务无法添加时间戳,但可以禁用缓存功能,像这样:myXMLHTTP.setRequestHeader('If-Modified-Since', '0'); //禁用缓存功能 url := GetSrvUrl;//把edt_Url.Text和edt_Key.Text中的参数进行了分析和拼接处理 if useGet then begin //http get if chk_Pwd.Checked then //myXMLHTTP.open('Get',url,True,edt_User.Text,edt_Pwd.Text) //请不要在此放入验证用户和密码,会出错! myXMLHTTP.open('Get',url,False,EmptyParam,EmptyParam) else myXMLHTTP.open('Get',url,False,EmptyParam,EmptyParam); end else begin //http post 如用post方法实际上是调用updateGetRoomInfo_ByRoom,post方式会在函数名前加上update前缀 myXMLHTTP.open('Post', url, False, EmptyParam, EmptyParam); end; if chk_Pwd.Checked then //如果服务器需要验证用户,请把验证信息放入Header中。 begin begin UsrPwd_Base64 := edt_User.Text+':'+edt_Pwd.Text; UsrPwd_Base64 := 'Basic '+EncodeString(UsrPwd_Base64);//'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==' myXMLHTTP.setRequestHeader('Authorization', UsrPwd_Base64); end; end; //myXMLHTTP.setRequestHeader('Accept', 'application/x-www-form-urlencoded'); //myXMLHTTP.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); myXMLHTTP.setRequestHeader('If-Modified-Since', '0'); //禁用缓存功能,相当于添加了时间戳 myXMLHTTP.setRequestHeader('Accept', 'application/json'); myXMLHTTP.setRequestHeader('Content-Type', 'application/json'); myXMLHTTP.setRequestHeader('Charset', 'utf-8'); //请求主体 try if useGet then begin //http get 如果url中已包含了参数,则无需在此再次传递参数 myXMLHTTP.send(EmptyStr); end else begin //http post JsonParamStr := GetParamStr_Json;//GetParamStr;// myXMLHTTP.send(JsonParamStr); end; Memo1.Lines.Add(Format('XMLHTTPRequest.status:%d',[myXMLHTTP.status])); Memo1.Lines.Add(Format('XMLHTTPRequest.statusText:%s',[myXMLHTTP.statusText])); Memo2.Lines.Add(myXMLHTTP.responseText); except on Ex:Exception do Memo1.Lines.Add(Ex.Message); end;end;
二、通用SOCKET方式调用接口服务执行结果:
仍然是查询前面提到的后台数据库中的记录。
因SQLConnection既支持SOCKET工作方式,同时又支持HTTP工作方式,下面的代码为对这两种工作方式分别进行了处理:
procedure TTestForm.ExecServerMethodBySocket(const useTcp_Ip: Boolean);var SQLConnection1:TSQLConnection; vobj:TServerMethodsClient;begin SQLConnection1 := TSQLConnection.Create(nil); Memo1.Clear; if useTcp_Ip then Memo1.Lines.Add('Socket TCP/IP 方式:') //SOCKET工作方式 else Memo1.Lines.Add('Socket HTTP 方式:'); Memo1.Lines.Add('执行状态:'); Memo2.Clear; if useTcp_Ip then Memo2.Lines.Add('Socket TCP/IP 方式:') else Memo2.Lines.Add('Socket HTTP 方式:'); Memo2.Lines.Add('返回结果:'); try SQLConnection1.Close; SQLConnection1.LoginPrompt := False; SQLConnection1.DriverName := 'DataSnap'; SQLConnection1.Params.Values['HostName'] := GetSrvHost; SQLConnection1.Params.Values['DatasnapContext'] := 'peci'; if chk_Pwd.Checked then //如果服务器网站需要安全验证,填入验证所需的信息。 begin SQLConnection1.Params.Values['DSAuthenticationUser'] := edt_User.Text; SQLConnection1.Params.Values['DSAuthenticationPassWord'] := edt_Pwd.Text; SQLConnection1.Params.Values['UserName'] := edt_User.Text; SQLConnection1.Params.Values['PassWord'] := edt_Pwd.Text; end else begin SQLConnection1.Params.Values['DSAuthenticationUser'] := ''; SQLConnection1.Params.Values['DSAuthenticationPassWord'] := ''; SQLConnection1.Params.Values['UserName'] := ''; SQLConnection1.Params.Values['PassWord'] := ''; end; if useTcp_Ip then //使用SOCKET工作方式 begin //如果使用tcp/ip协议,则使用下面的语句 SQLConnection1.Params.Values['CommunicationProtocol'] := 'tcp/ip'; SQLConnection1.Params.Values['Port'] := edt_Tcp_Port.Text; end else begin //如果使用http协议,则使用下面的语句 SQLConnection1.Params.Values['CommunicationProtocol'] := 'http'; SQLConnection1.Params.Values['Port'] := GetSrvPort;//GetSrvPort函数会从URL中解析出所需的端口号信息 end; try if not SQLConnection1.Connected then SQLConnection1.Connected := True; vobj := TServerMethodsClient.Create(SQLConnection1.DBXConnection); Memo2.Lines.Add(vobj.ExecSrvMethod(GetSrvMethodName,GetParamStr)); Memo1.Lines.Add('OK'); except on e:Exception do Memo1.Lines.Add(e.Message); end; finally FreeAndNil(vobj); FreeAndNil(SQLConnection1); end;end;
本Demo程序下载:http://download.csdn.net/detail/xieyunc/9879261
阅读全文
0 0
- XMLHTTPRequest、IDHTTP、SQLConnection访问DataSnap/Restful接口服务演示程序
- ASP如何调用Delphi开发的DataSnap/Restful接口服务
- PHP如何调用Delphi开发的DataSnap/Restful接口服务
- restful服务接口访问乱码 和 505错误
- Restful接口访问工具
- 为DataSnap系统服务程序添加描述
- 配置restful接口https访问
- Spring RestTemplate 访问 restFul 接口
- 使用RestTemplate访问restful服务
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Delphi2010中DataSnap高级技术(1)—为DataSnap系统服务程序添加描述
- Android 程序访问WEB服务 HTTP 接口使用
- idhttp代理访问
- idhttp访问gzip
- 无需编码 用Jersey演示开发RESTful服务
- 淘宝 TFS restful 接口访问方式
- RestTemplate访问Spring MVC restFul接口
- 顽思客的第一次
- linux下用多线程实现socket服务器和客户端的异步通信
- extjs4 前台分页
- php.ini
- 原型和闭包(整理)
- XMLHTTPRequest、IDHTTP、SQLConnection访问DataSnap/Restful接口服务演示程序
- 内核参数 ip_forward 与报文转发
- spring 快速入门
- 后台权限拦截器编写
- sso(单点登录)
- 一道题
- 转一个比较不错的git常用命令清单
- 解决github release下载失败问题
- 短信、微信、QQ信息监听