delphi xe7 环境下使用 restclient,restrequest ,restrespone 三个组件取java 的rest服务数据。
1. 普通rest服务地址的取,在网上很多例子,就不多说,很容易实验
2.在rest的地址中用get 方法 提交带有json数据格式的地址。
如:http://localhost:8080/rest/def/updatefds/{"fdsno":1,"describe":"河内你好","canipno":2,"scanflag":1,"fdstype":"S","opt":"update"}/1490424350230
发现提示无法连接,根据跟踪发现无法解析地址中的json
最后变成 http://localhost:8080/rest/def/updatefds///1490424350230
使用 HttpAnalyzerStd V7 该抓包工具可观察
解决该问题,使用 restClient1.BaseURL := TIdURI.URLEncode('http://localhost:8080/rest/def/updatefds/{"fdsno":1,"describe":"河内你好","canipno":2,"scanflag":1,"fdstype":"S","opt":"update"}/1490424350230'); 编码
提交。。发现编码后的地址 变成
rest/def/updatefds/%257B%2522opt%2522:%2522update%2522,%2522canipno%2522:2,%2522scanflag%2522:1,%2522describe%2522:%2522%25E6%25B2%25B3%25E5%2586%2585%25E4%25BD%25A0%25E5%25A5%25BD123%2522,%2522fdsno%2522:1,%2522fdstype%2522:%2522S%2522%257D/1490424350230
注意 你们多了个%25
正确的编码 应该是这样:
rest/def/updatefds/%7B%22fdsno%22:1,%22describe%22:%22%E6%B2%B3%E5%86%85%E4%BD%A0%E5%A5%BD%22,%22canipno%22:2,%22scanflag%22:1,%22fdstype%22:%22S%22,%22opt%22:%22update%22%7D/1490424350230
经过分析 %25 实际是%号的转义。restRequest 再次对编码过的地址二次编码!坑爹啊!
需要设置 RESTRequest1.URLAlreadyEncoded := true; 使restrequest 不在二次编码!
提交 搞定!!!!血的教训啊。 摸索了一天,希望能给后来朋友一个提示!