1. 程式人生 > >Http協議訪問DataSnap Rest 伺服器 - 封三郎

Http協議訪問DataSnap Rest 伺服器 - 封三郎

用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單元。