DataSnap的REST服务器ServerMethod参数编码问题
2010-10-11 18:04
603 查看
在delphi xe下测试REST Server,其中有个ReverseString服务器函数,就是把一个传入的字串翻转。用DataSnap调用是:
然而用http get来调用时却要注意参数的编码:
在对参数编码时,有两个现成的函数:
1、IdURI.pas的TIdURI.ParamsEncode
这个函数里面把需要转义的字符定义为: UnsafeChars: TIdUnicodeString = '*<>#%"{}|/^[]`'; {do not localize}
但是这样不够,这两个字符没有包括:/?,如果参数中有这些字符,结果就不对了,或者导致调用失败。修改这个函数把这两个字符加上,就可以了。
2、httpApp.pas的HTTPEncode
首先,这个函数的参数是ansistring,其次,里面把空格转成加号,不能满足需要。
procedure TForm1.Button1Click(Sender: TObject); var vC:TDBXCommand; P:TDBXParameter; begin SQLConnection1.Params.Values['CommunicationProtocol'] := 'http'; SQLConnection1.Params.Values['HostName'] := edDSServer.Text; SQLConnection1.Params.Values['Port'] := edDSPort.Text; SQLConnection1.Params.Values['DSAuthenticationUser'] := edUserName.Text; SQLConnection1.Params.Values['DSAuthenticationPassword'] := edPassowrd.Text; SQLConnection1.Open; vC:=SQLConnection1.DBXConnection.CreateCommand; vC.CommandType:= TDBXCommandTypes.DSServerMethod; vC.Text:='TServerMethods1.ReverseString'; vC.Prepare; vC.Parameters[0].Value.SetString(Edit2.Text); vC.ExecuteUpdate; Edit1.Text:=vC.Parameters[1].Value.asString; vC.Free; end;
然而用http get来调用时却要注意参数的编码:
procedure TForm1.Button2Click(Sender: TObject); var vMS:TMemoryStream; B:TBytes; J:TJSONObject; S:string; vURL:string; begin vMS:=TMemoryStream.Create; try vURL:='http://'+edDSServer.Text+':'+edDSPort.Text+'/datasnap/rest/TServerMethods1/ReverseString/'; vURL:=vURL+ParamsEncode(Edit2.Text); IdHTTP1.Get(vURL,vMS); SetLength(B,vMS.Size); vMS.Position:=0; vMS.Read(B[0],vMS.Size); J:=TJSONObject.Create; J.Parse(B,0); Edit1.Text:=TJSONArray(J.Get(0).JsonValue).Get(0).Value; J.Free; finally vMS.Free; end; end;
在对参数编码时,有两个现成的函数:
1、IdURI.pas的TIdURI.ParamsEncode
这个函数里面把需要转义的字符定义为: UnsafeChars: TIdUnicodeString = '*<>#%"{}|/^[]`'; {do not localize}
但是这样不够,这两个字符没有包括:/?,如果参数中有这些字符,结果就不对了,或者导致调用失败。修改这个函数把这两个字符加上,就可以了。
2、httpApp.pas的HTTPEncode
首先,这个函数的参数是ansistring,其次,里面把空格转成加号,不能满足需要。
相关文章推荐
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- DATA SNAP REST 服务 HTML页面乱码问题 .
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- DataSnap Server用到 sqlConnection组件 Abnormal program termination(目前的项目上发现XP系统有此问题)
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- Http协议访问DataSnap Rest 服务器 - 封三郎
- Http协议访问DataSnap Rest 服务器
- DATA SNAP REST 服务 HTML页面乱码问题
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (三)用TClientDataSet的“ProviderName”属性连接服务器时,无法找到服务器端的“DatasetProvier”
- FTP上传服务器问题--Host attempting data connect x.x.x.x is not same as server x.x.x.y
- Delphi XE8中开发DataSnap程序常见问题和解决方法 (三)用TClientDataSet的“ProviderName”属性连接服务器时,无法找到服务器端的“DatasetProvier”
- Delphi XE程序设计系列 2-开发DataSnap/REST服务器 .
- DataSnap Rest 服务器网络分配器返回格式定义
- Http协议访问DataSnap Rest 服务器
- Delphi2010中使用DataSnap创建服务器时出现Socket Error# 10013的问题的解决方法
- Server2003系统上的内置服务器设置某类IP无法访问问题
- 使用Apache 的 FTP Client获取FTP服务器上的文件列表FTP response 421 received.Server closed connection问题的解决
- 安装和启动tftp-server服务器及可能出现Redirecting to /bin/systemctl restart xinetd.service问题的解决方式