请教:简单的Delphi向web服务器提交问题,初学,请指教!

dpbug_cn 2018-01-14 04:07:58
开发环境:WIN10家庭版,Delphi XE4
功能需求:Delphi使用IdHTTP控件向web服务器发送一个请求,获得返回的数据。该服务器支持XML和JSON返回,说明中提到需要——“客户端指定ContentType="application/json",则服务器返回JSON格式”
请求语句:http://**.**.**.**:**/api/**/getlastinfo?tid=2123123&key=3546-2232-23421-2342

我使用Edge直接在浏览器中输入上述链接,返回正常:
{"tid":"2123123","Time":0,"Dir":240,"Mileage":0"Addr":{"Province":"山东省","City":"济南市"},}

我使用DELPHI写入,代码如下:
url := 'http://**.**.**.**:**/api/**/getlastinfo?tid=2123123&key=3546-2232-23421-2342';
IdHTTP.Get(url, ts); // ts 为TStringStream
ts.Position := 0;
ajson := SuperObject.so(ts.DataString); // ajson为ISuperObject
dir := ajson['Dir'].AsInteger; // 此句报错了
我把报错的语句注释掉,加上了Memo1.Lines.Add(ajson.AsString); 想看看返回的是否正确,结果Memo1显示的内容如下:
<TDetail xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CloudMap.Models"><Time>0</Time><Dir>240</Dir><Addr><City>娴庡崡甯?/City><Province>灞变笢鐪?/Province></Addr></TDetail>
返回的应该不是JSON类型了,而且还是乱码,明明浏览器中测试通过,为什么不行能。是不是用IdHTTP发送请求错误?
在线等,谢谢!
...全文
1584 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
比特灵 2018-04-16
  • 打赏
  • 举报
回复
先用postman测试接口,没问题了再处理程序。而且你收到的数据没有做任何检查,没有异常捕获。
xxfly 2018-04-13
  • 打赏
  • 举报
回复
初始化设置下 idhtp1.HandleRedirects := true; idhtp1.Request.ContentType := 'application/x-www-form-urlencoded'; idhtp1.Request.ContentEncoding := 'utf-8'; idhtp1.ProtocolVersion := pv1_1;
shadowpj 2018-01-15
  • 打赏
  • 举报
回复
结果这样试试:(最好先showmessage(ts.DataString))看看结果是否正确 jo:=SO(UTF8Decode(HttpDecode(ts.DataString))); dir:=jo['Dir'].Asinteger;
shadowpj 2018-01-15
  • 打赏
  • 举报
回复
不是需求里说指定JSON格式吗?你加上去在看看结果。 IdHTTP1.Request.ContentType := 'application/json';//设置内容类型为json
dpbug_cn 2018-01-15
  • 打赏
  • 举报
回复
引用 3 楼 shadowpj 的回复:
结果这样试试:(最好先showmessage(ts.DataString))看看结果是否正确 jo:=SO(UTF8Decode(HttpDecode(ts.DataString))); dir:=jo['Dir'].Asinteger;
感谢,这个应该能消除乱码,但是还是不能使服务器返回JSON数据
dpbug_cn 2018-01-15
  • 打赏
  • 举报
回复
引用 2 楼 shadowpj 的回复:
不是需求里说指定JSON格式吗?你加上去在看看结果。 IdHTTP1.Request.ContentType := 'application/json';//设置内容类型为json
我这样设置了,返回数据还是:<TDetail xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/CloudMap.Models"><Time>0</Time><Dir>240</Dir><Addr><City>娴庡崡甯?/City><Province>灞变笢鐪?/Province></Addr></TDetail>
dpbug_cn 2018-01-14
  • 打赏
  • 举报
回复
请各位大神不吝指教啊

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧