開發環境: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發送請求錯誤?
在線等,謝謝!
uj5u.com熱心網友回復:
請各位大神不吝指教啊uj5u.com熱心網友回復:
不是需求里說指定JSON格式嗎?你加上去在看看結果。IdHTTP1.Request.ContentType := 'application/json';//設定內容型別為json
uj5u.com熱心網友回復:
結果這樣試試:(最好先showmessage(ts.DataString))看看結果是否正確jo:=SO(UTF8Decode(HttpDecode(ts.DataString)));
dir:=jo['Dir'].Asinteger;
uj5u.com熱心網友回復:
我這樣設定了,回傳資料還是:<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>
uj5u.com熱心網友回復:
感謝,這個應該能消除亂碼,但是還是不能使服務器回傳JSON資料
uj5u.com熱心網友回復:
初始化設定下idhtp1.HandleRedirects := true;
idhtp1.Request.ContentType := 'application/x-www-form-urlencoded';
idhtp1.Request.ContentEncoding := 'utf-8';
idhtp1.ProtocolVersion := pv1_1;
uj5u.com熱心網友回復:
先用postman測驗介面,沒問題了再處理程式。而且你收到的資料沒有做任何檢查,沒有例外捕獲。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/42793.html
標籤:網絡通信/分布式開發
上一篇:請教 ClipBoard問題
下一篇:trunc 很奇怪的問題。
