Vilarejo PK2P
Bem-vindo ao fórum Vilarejo PK2P! O fórum oficial do canal Press Key to Play do Youtube!

Grupo para reunir as pessoas que acompanham os vídeos no canal Press Key to Play e discutir os assuntos abrangidos pelo Blog PK2P.


Você não está conectado. Conecte-se ou registre-se

[tutorial] criar servidor http em delphi

Ir em baixo  Mensagem [Página 1 de 1]

e ae galera nesse tutorial vamos criar um simples servidor HTTP usando o delphi e a biblioteca indy (o delphi que estarei utilizando nesse tutorial sera o delphi 7 com a biblioteca indy atualizada ~ pode ser feito o mesmo em um delphi mais recente que ja tem a biblioteca indy atualizada). Para começar essa brincadeira toda vamos criar uma simples interface para ele, a interface sera composta por dois botões para ligar e desligar o servidor, um Edit para especificar a porta e um Memo para escrever o nosso codigo html (css e js)

[tutorial] criar servidor http em delphi TXnyN6j

agora colocamos o componente do servidor http (IdHttpServer) que fica na aba "Indy Servers"

[tutorial] criar servidor http em delphi OdL3kkL

vamos editar o evento OnClick do botão que vai ligar aquele servidor. Naquele evento temos que desligar o servidor caso ele já esteja rodando (isso evitaria rodar duas instancia do mesmo servidor e acabar dando algum tipo de erro), para fazer isso setamos False no atributo Active daquele componente (IdHTTPServer1.Active). Mudamos a porta no atributo DefaultPort (como o texto no edit é uma string e o atributo DefaultPort so aceita Integer usamos o metodo strtoint para converter). Por fim ligamos o servidor novamente com o Active

Código:
procedure TForm1.Button1Click(Sender: TObject);
begin
  IdHTTPServer1.Active := False;
  IdHTTPServer1.DefaultPort := StrToInt(Edit1.Text);
  IdHTTPServer1.Active := True;
end;

no evento OnClick do botão que vamos desligar o servidor, colocamos o Active do componente em false

Código:
procedure TForm1.Button2Click(Sender: TObject);
begin
  IdHTTPServer1.Active := False;
end;

[tutorial] criar servidor http em delphi Z7HRyIf

teoricamente o nosso servidor já esta pronto, só precisamos processar a requisição que vem do cliente e a resposta que volta para o cliente. Para fazer isso vamos usar o AResponseInfo e ARequestInfo que são passadas junto com o evento OnCommandGet do nosso componente IdHttpServer. Primeiro vamos enviar apenas o nosso html para o cliente, depois pensamos em uma forma melhor para manipular a requisição que vem do lado cliente para deixar o servidor mais dinamico. Para a gente simplesmente enviar o html usamos o atributo ContentText do AResponseInfo (nesse caso vamos passar o atributo Lines.GetText do Memo, é nele que vamos colocar o nosso html)

Código:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  AResponseInfo.ContentText := Memo1.Lines.GetText;
end;

é necessario declarar tambem o idcontext em uses

Código:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdCustomHTTPServer,
  IdHTTPServer, StdCtrls, idcontext;

se a gente compilar e rodar o programa, colocar um codigo html nele, depois ligar o servidor e entrar na pagina pelo navegador, vai funcionar normalmente como um servidor HTTP (tá, eu sei que não é um apache da vida, mais funciona ué kkk)

Código:
<html>
<head>
<title>by kodo no kami</title>
</head>
<body><center>
<h1>pagina de teste</h1><hr>
<img src="https://i.imgur.com/fa3QGBF.png">
</center></body>
</html>

[tutorial] criar servidor http em delphi E0FZ9qA

através do ARequestInfo podemos pegar as passagens de metodos e outras informações que vem do lado cliente. O atributo Document retorna o path completo sem os parametros passados (get/post), então se a gente passa a seguinte url "http://192.168.1.1/kodo/pagina.html?id=123" ira retornar apenas "/kodo/pagina.html" (podemos utilizar desse recurso para carregar uma pagina especifica no computador e com isso deixar o nosso servidor mais dinamico), um exemplo seria pegar esse path carregar o arquivo no Memo e dele mandar para o cliente (obs: não estamos tratando os erros aqui nesse servidor, então se colocar uma pagina não existente vai retornar um erro)

Código:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  Memo1.Lines.LoadFromFile('.\' + ARequestInfo.Document);
  AResponseInfo.ContentText := Memo1.Lines.GetText;
end;

[tutorial] criar servidor http em delphi SjNTTG1

para a gente ler alguma passagem de parâmetro usamos o atributo Params, sendo ele uma lista de strings (TStrings) onde cada passagem é uma linha separada. Um exemplo de uma pagina onde precisamos passar dois parametros "usu" e "sen" para permitir o acesso a uma pagina especifica, se a gente passar os parametros errados, nesse caso o usuario e a senha vamos parar em uma pagina

Código:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var cont: Integer;
 usuario, senha, temp: string;
begin
  for cont := 0 to (ARequestInfo.Params.Count - 1) do
  begin
    temp := ARequestInfo.Params[cont];
    if(StrPos(PChar(temp),PChar('usu=')) <> '') then
    begin
        usuario := StrRScan(PChar(temp),'=') + 1;
    end;

    if(StrPos(PChar(temp),PChar('sen=')) <> '') then
    begin
        senha := StrRScan(PChar(temp),'=') + 1;
    end;
  end;

  if((usuario = 'kodo') and (senha = '123456')) then
  begin
    Memo1.Lines.LoadFromFile('./login/sim.html');
    AResponseInfo.ContentText := Memo1.Lines.GetText;
  end
  else
  begin
    Memo1.Lines.LoadFromFile('./login/nao.html');
    AResponseInfo.ContentText := Memo1.Lines.GetText;
  end;
end;

[tutorial] criar servidor http em delphi M2PZZbc

se a gente passar os parametros corretos, vamos parar em uma outra pagina

[tutorial] criar servidor http em delphi XL0ylKJ

bom galera esse tutorial termina aqui porem, existem muitas coisas que ainda podemos fazer para melhorar esse servidor, como manipular os cookies e headers, gerar logs de acessos, chamar pelo delphi scripts como o php e retornar a saida, entre muitas coisas ^^

by kodo no kami

Ver perfil do usuário https://eofclub.in/forum

Voltar ao Topo  Mensagem [Página 1 de 1]

Permissão deste fórum:
Você não pode responder aos tópicos neste fórum