|
|
导航: |
论坛 -> Web应用开发
斑竹:bodies |
|
作者: |
dpbug (dpbug) |
★☆☆☆☆ |
-
|
普通会员 |
|
2018/1/14 16:10:14 |
标题: |
请教:简单的Delphi向web服务器提交问题,初学,请指教! |
浏览:2544 |
|
加入我的收藏 |
楼主: |
开发环境:WIN10家庭版,Delphi XE4 功能需求:Delphi使用IdHTTP控件向web服务器发送一个请求,获得返回的数据。该服务器支持XML和JSON返回,说明中提到需要——“客户端指定Con_tentType="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发送请求错误? 在线等,谢谢!
----------------------------------------------
- |
作者: |
|
2018/1/14 22:30:38 |
1楼: |
返回的是xml类型,你没有指定返回类型
----------------------------------------------
|
作者: |
|
2018/1/14 22:32:08 |
2楼: |
你直接showmessage显示以看看是不是乱码
----------------------------------------------
|
作者: |
dpbug (dpbug) |
★☆☆☆☆ |
-
|
普通会员 |
|
2018/1/14 23:02:54 |
3楼: |
上述信息我也showmessage了,和memo显示的一样,是乱码。 另外,好像这也不是XML格式啊,xml文件开头应该是:‘<?xml version="1.0" encoding="utf-8"?>’ 所以我用delphi自带的xml控件也解析不了,提示错误。 怎么指定web服务器返回类型呢?为什么用windows的edge浏览器就能返回json格式?请指教
----------------------------------------------
-
|
作者: |
cxg417 (cxg417) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2018/1/14 23:52:36 |
4楼: |
有在哪指定Con_tentType="application/json"这个的选项吗?
----------------------------------------------
-
|
作者: |
dpbug (dpbug) |
★☆☆☆☆ |
-
|
普通会员 |
|
2018/1/15 8:10:44 |
5楼: |
是啊,我也不清楚哪里能设置ContentType="application/json",
----------------------------------------------
-
|
作者: |
|
2018/1/15 9:35:08 |
6楼: |
IdHTTP.Request.Accept='application/json'
IdHTTP.Request.Accept默认是'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',这里默认是没有json的
可能是这里的问题吧,试看看,我也没实际试过!
----------------------------------------------
虽千万人吾往矣!
|
作者: |
|
2018/1/15 10:18:46 |
7楼: |
get post head 等 都可以带上请求头信息。 楼上的代码,应该就是请求的信息的一部分。
IdHTTP.Request 对象,内部有很多信息的。
但是,乱码问题,需要用另一个办法解决。
最简单的 ts 构造的时候,指定编码。 只要你编码指定对了,就不会乱码了。
----------------------------------------------
(C)(P)Flying Wang
|
作者: |
|
2018/1/15 10:55:41 |
8楼: |
json数据里面有中文,如果不注意编码就会出现乱码。
我前几天刚碰到,用ajax取回来的数据中文就是乱码的。后来我把服务端json数据文件(因为我是发送数据文件到浏览器的,所以是一个文件)另存为utf8格式,再发送就正常了。
----------------------------------------------
虽千万人吾往矣!
|
作者: |
bjlg (蓝天) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2018/1/15 22:11:41 |
9楼: |
是delphi json对格式要求的严格而已格式错了,你看ajson 是不是nil
----------------------------------------------
http://delphi.icm.edu.pl/ftp/http://delphi-z.ru
|
作者: |
|
2018/1/17 12:27:46 |
10楼: |
指定了charset=utf-8,那么就要用utf8解一次码。
----------------------------------------------
--
|
作者: |
dpbug (dpbug) |
★☆☆☆☆ |
-
|
普通会员 |
|
2018/1/24 23:15:16 |
11楼: |
感谢各位的帮助,问题已经解决。 设置IdHTTP.Request.Accept := 'application/json'后,服务器能够正常返回JSON数据了。 另外,加上一句ts := TStringStream.Create('', TEncoding.GetEncoding(65001)); 可以解决乱码的问题。 谢谢各位!!!
----------------------------------------------
-
|
|