Cara Membuat Http Server di Delphi

Untuk membuat http server di Delphi caranya sangat mudah, anda tinggal memasang komponen TidhttpServer yang merupakan salah satu komponen dari Indy(Internet Direct) Project.

Adapun untuk menjalankan server http tersebut ada 2 pilihan yang bisa anda gunakan yaitu sebagai aplikasi atau sebagai service.

Sebagai Aplikasi:

Untuk membuat http server sebagai aplikasi biasa anda bisa menggunakan GUI interface layaknya kita membuat desktop aplikasi.  Buka form anda lalu taruh komponen TidhttpServer setelah itu setting property default port sesuai yang anda kehendaki.
Jika sudah selesai taruh di event OnCommandGetText script seperti berikut:


procedure TForm1.idhtpsrvr1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
  var
  msStream:TMemoryStream;

begin
//untuk request berupa text atau html
if ARequestInfo.URI='/' then
begin
AResponseInfo.ContentType:='text/html';
AResponseInfo.ContentText:='your html';
end
// untuk request json
else if ARequestInfo.uri='/abc' then
begin
AResponseInfo.ContentType:='application/json';
AResponseInfo.ContentText:='{"abc":"def"}';
end
// untuk request dowload file
else if ARequestInfo.uri='/download' then
begin
AResponseInfo.ContentType:='application/octet-stream';

AResponseInfo.ContentDisposition:='attachment;filename="HelloFromVB.pdf"';
msStream:=TMemoryStream.Create;
  msStream.LoadFromFile(ExtractFilePath(ParamStr(0))+'HelloFromVB.pdf');
AResponseInfo.ContentStream:=msStream;
end
// untuk request data gambar
else if ARequestInfo.URI='/image' then
begin
AResponseInfo.ContentType:='image/jpeg';
msStream:=TMemoryStream.Create;
msStream.LoadFromFile(ExtractFilePath(ParamStr(0))+'tamara.jpg');
AResponseInfo.ContentStream:=msStream;
end
// untuk accept post data
else if ARequestInfo.URI='/postdata' then
begin
WriteLog('Nilai 1 adalah '+ArequestInfo.Params.Values['nilai1']);
WriteLog('Nilai 2 adalah '+ArequestInfo.Params.Values['nilai2']);
AResponseInfo.ContentText:='Berhasil';
end;
end;

Sebagai testing anda bisa menggunakan plugin RestLet Client yang bisa anda dapatkan di Chrome Webstore.

Dan berikut adalah prosedur untuk writelog


function getLogFile:string;
begin
Result:= ExtractFilePath(ParamStr(0))+ExtractFilename(ChangeFileExt(paramstr(0), '.log'));
end;  
procedure CreateLogfile;
var
  F:TextFile;
FN:String;
begin
  // Getting the filename for the logfile (In this case the Filename is 'application-exename.log'
  FN :=getLogFile;
  // Assigns Filename to variable F
  AssignFile(F,FN);
  // Rewrites the file F
  Rewrite(F);
  // Open file for appending
  Append(F);
  // finally close the file
  CloseFile(F);
end;

procedure WriteLog(aLogMessage:String);
var
  F:TextFile;
FN:String;
begin
  // Getting the filename for the logfile (In this case the Filename is 'application-exename.log'
  FN := getLogFile;

  //Checking for file
  if (not FileExists(FN)) then
  begin
    // if file is not available then create a new file
    CreateLogFile;
  end;

  // Assigns Filename to variable F
  AssignFile(F, FN);
  // start appending text
  System.Append(F);
  //Write a new line with current date and message to the file
  WriteLn(F, aLogMessage);
  // Close file
  CloseFile(F)
end;

Sebagai Service

Jika anda menginginkan server http berjalan sebagai service caranya juga sangat mudah yaitu:

    • Buat proyek baru berjenis service application seperti berikut:
      Service Application Delphi
    • Setting property ServiceName dan DisplayName sesuai yang anda kehendaki.  ServiceName berfungsi saat anda menjalankan service sedang displayname berfungsi sebagai nama yang tercantum di daftar service windows.
    • Taruh di DataModule anda komponen Tidhttpserver.
    • Di event OnCommandGetText Tidhttpserver isi dengan script yang sama seperti di atas.
    • Saat event OnCreate di datamodul komponen Indy HTTP Server tersebut bisa anda aktifkan:
      
      procedure TIndyHttpService.ServiceDestroy(Sender: TObject);
      begin
      idhtpsrvr1.Active:=True;
      end;
      
    • Saat event OnDestroy anda tinggal disconnect atau non aktifkan komponen Tidhttpserver tersebut dengan membuat script berikut:
      
      procedure TIndyHttpService.ServiceDestroy(Sender: TObject);
      begin
      idhtpsrvr1.Active:=False;
      end;
      
    • Install Service yang anda buat tersebut dengan mengetikkan [nama file exe] /install. Misal C:\MyService.exe /install. Anda harus running sebagai administrator untuk registrasi service tersebut.  Jika berhasil maka di daftar service anda akan keluar seperti berikut:
      Service Indy HTTP Server
    • Run Service anda dengan mengetikkan net start [namaservice] atau bisa juga melalui daftar Services.  Untuk memberhentikannya dengan perintah net stop [namaservice].  Nama Service tersebut bukan nama file exe tetapi diisi sesuai dengan property ServiceName di DataModule.

Untuk script lebih lengkap anda bisa download attachment dibawah.  Sebagai testing anda bisa mengetikkan di browser anda http://localhost:8021 diikuti path sebagaimana script event OnCommandGetText seperti tersebut di atas.

Attachments

anasmbahdien

Seorang programmer yang menguasai bahasa pemograman Delphi, VB.NET, PHP dan Android. Untuk hasil karya kunjungi mogotekno.com

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *