Http協議訪問DataSnap Rest 伺服器 - 封三郎
阿新 • • 發佈:2018-11-10
用TIDHttp訪問DataSnap Rest伺服器,在伺服器採用了使用者驗證的情況下,客戶端需要注意下面的細節,否則不能正常連線。
假如伺服器有如下的使用者驗證:
procedure TSC.DSAuthenticationManager1UserAuthenticate(Sender: TObject; const Protocol, Context, User, Password: string; var valid: Boolean; UserRoles: TStrings); var sCheckCode : string; begin valid := False; sCheckCode := CMBSrvIniSetting.SrvCnnCheckCode; if PassWord.Equals(sCheckCode) then begin valid := True; end; end;
那麼在客戶端連線的時候,必須把這個密碼傳遞過去,否則會發生401錯誤。
procedure TForm15.Button2Click(Sender: TObject); var url, params, Text: string; code: Integer; http: TIDHttp; begin http:= TIDHttp.Create(nil); http.Request.BasicAuthentication := True; http.request.password := '密碼'; params := Edit1.Text; url:= 'http://192.168.10.182:8081/datasnap/rest/TSM/EchoString/'; try text := http.Get(URL+TIdURI.ParamsEnCode(params)); Edit2.Text := Text; except on E: Exception do begin end; end; end;
這樣客戶端就可以正常訪問伺服器的方法了。
此外,如果客戶端採用Post的方式訪問伺服器的話,伺服器的方法在定義的時候需要在前面加上Update字首:UpdateEchoString。
TIdURI類定義在IdURI.pas單元。