Página 1 de 1

uHttpd - Servidor HTTP em Harbour

Enviado: 09 Nov 2024 16:48
por Itamar M. Lins Jr.
Olá!
O Harbour tem um servidor uHTTPD, (micro HTTPD) modesto, mas serve de partida para turbinar nossas aplicações.
Suponha que seu sistema está instalado em uma empresa e vc precisa disponibilizar acesso para smartphones, e colocar alguma consulta, de preços por exemplo para os vendedores. uHTTPd é uma boa alternativa. Chega ao nível até de emissão NFCe/NFe se for o caso.
Simples, e muito funcional.
UHttpsrv.rar
Servidor Web PRG/HRB (CDX/NTX/LETO)
(1.64 MiB) Baixado 92 vezes
Conforme for colocarei aqui, algum exemplo de uso.
Foi compilado em 64Bits!

Saudações,
Itamar M. Lins Jr.

uHttpd - Servidor HTTP em Harbour

Enviado: 09 Nov 2024 17:12
por Itamar M. Lins Jr.
Olá!
Quando rodamos ele, fica o processo (daemon) esperando uma requisição via algum navegador(Chrome/Edger/Firefox...)
2024-11-09_17-09-15.png
A pagina inicial de qualquer site se chama, index.html(padrão) pode variar para .PHP/ASP... Enfim, o nome(da pagina inicial) é configurado no servidor.
chame ele e digite no seu navegador: localhost:8082 ou no seu celular, o ip do seu micro(caso libere ele no firewall do windows.)

Saudações,
Itamar M. Lins Jr.

uHttpd - Servidor HTTP em Harbour

Enviado: 09 Nov 2024 17:30
por Itamar M. Lins Jr.
Olá!
Instalando a GDLIB(lib gráfica) para gerar imagens no servidor.(tô vendo o exemplo do contador de páginas.)
No msys2(prompt)

Código: Selecionar todos

$ pacman -S mingw-w64-x86_64-libgd
resolving dependencies...
looking for conflicting packages...
warning: dependency cycle detected:
warning: mingw-w64-x86_64-libwebp will be installed before its mingw-w64-x86_64-libtiff dependency
warning: dependency cycle detected:
warning: mingw-w64-x86_64-harfbuzz will be installed before its mingw-w64-x86_64-freetype dependency

Packages (32) mingw-w64-x86_64-aom-3.10.0-2  mingw-w64-x86_64-crypto++-8.9.0-1
              mingw-w64-x86_64-dav1d-1.5.0-1  mingw-w64-x86_64-fontconfig-2.15.0-2
              mingw-w64-x86_64-freetype-2.13.3-1  mingw-w64-x86_64-giflib-5.2.2-1
              mingw-w64-x86_64-glib2-2.82.2-1  mingw-w64-x86_64-graphite2-1.3.14-3
              mingw-w64-x86_64-harfbuzz-10.0.1-1  mingw-w64-x86_64-jbigkit-2.1-5
              mingw-w64-x86_64-kvazaar-2.3.1-1  mingw-w64-x86_64-lcms2-2.16-1
              mingw-w64-x86_64-lerc-4.0.0-1  mingw-w64-x86_64-libavif-1.1.1-1
              mingw-w64-x86_64-libde265-1.0.15-1  mingw-w64-x86_64-libdeflate-1.22-1
              mingw-w64-x86_64-libheif-1.19.1-1  mingw-w64-x86_64-libimagequant-4.3.3-1
              mingw-w64-x86_64-libjpeg-turbo-3.0.4-2  mingw-w64-x86_64-libtiff-4.7.0-1
              mingw-w64-x86_64-libwebp-1.4.0-1  mingw-w64-x86_64-libyuv-1887.r2537.a6a2ec65-1
              mingw-w64-x86_64-openjpeg2-2.5.2-1  mingw-w64-x86_64-openjph-0.17.0-1
              mingw-w64-x86_64-pcre2-10.44-1  mingw-w64-x86_64-python-packaging-24.1-2
              mingw-w64-x86_64-rav1e-0.7.1-2  mingw-w64-x86_64-svt-av1-2.3.0-1
              mingw-w64-x86_64-wineditline-2.208-1  mingw-w64-x86_64-x265-3.6-1
              mingw-w64-x86_64-xpm-nox-4.2.0-8  mingw-w64-x86_64-libgd-2.3.2-8

Total Download Size:    52.27 MiB
Total Installed Size:  279.75 MiB

:: Proceed with installation? [Y/n] Y
:: Retrieving packages...
 mingw-w64-x86_64-crypto++-...     2.7 MiB   539 KiB/s 00:05 [###############################] 100%
 mingw-w64-x86_64-rav1e-0.7...     2.2 MiB   696 KiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-x265-3.6-...     3.1 MiB   203 KiB/s 00:16 [###############################] 100%
 mingw-w64-x86_64-aom-3.10....     3.4 MiB   206 KiB/s 00:17 [###############################] 100%
 mingw-w64-x86_64-libimageq...  1938.8 KiB   196 KiB/s 00:10 [###############################] 100%
 mingw-w64-x86_64-harfbuzz-...  1609.1 KiB   493 KiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-libheif-1...   767.6 KiB   296 KiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-pcre2-10....  1077.2 KiB   182 KiB/s 00:06 [###############################] 100%
 mingw-w64-x86_64-glib2-2.8...     5.0 MiB   217 KiB/s 00:24 [###############################] 100%
 mingw-w64-x86_64-libtiff-4...   669.0 KiB   324 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-dav1d-1.5...   841.7 KiB   150 KiB/s 00:06 [###############################] 100%
 mingw-w64-x86_64-libjpeg-t...   635.8 KiB   336 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-libwebp-1...   616.8 KiB   278 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-openjpeg2...   420.5 KiB   274 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-libde265-...   530.7 KiB   223 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-freetype-...   613.9 KiB   180 KiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-lcms2-2.1...   373.4 KiB   276 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-libyuv-18...   555.3 KiB   113 KiB/s 00:05 [###############################] 100%
 mingw-w64-x86_64-libgd-2.3...   302.5 KiB   200 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-lerc-4.0....   284.3 KiB   174 KiB/s 00:02 [###############################] 100%
 mingw-w64-x86_64-fontconfi...   278.8 KiB  95.9 KiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-kvazaar-2...   340.9 KiB  71.0 KiB/s 00:05 [###############################] 100%
 mingw-w64-x86_64-giflib-5....   118.9 KiB   121 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-openjph-0...   269.3 KiB  66.4 KiB/s 00:04 [###############################] 100%
 mingw-w64-x86_64-graphite2...   141.2 KiB   109 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-libavif-1...   234.8 KiB  75.4 KiB/s 00:03 [###############################] 100%
 mingw-w64-x86_64-jbigkit-2...   103.7 KiB   103 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-python-pa...   102.3 KiB   102 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-libdeflat...    88.9 KiB  85.8 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-xpm-nox-4...    73.2 KiB  58.6 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-wineditli...    60.0 KiB  85.2 KiB/s 00:01 [###############################] 100%
 mingw-w64-x86_64-svt-av1-2...    13.4 MiB   296 KiB/s 00:33 [#################--------------]  57%
 Total (31/32)                    42.5 MiB   296 KiB/s 00:33 [#########################------]  81%
Saudações,
Itamar M. Lins Jr.

uHttpd - Servidor HTTP em Harbour

Enviado: 09 Nov 2024 17:52
por Itamar M. Lins Jr.
Olá!
Achei um erro de sintaxe, na criação da gdlib.
Já reportei no forum de desenvolvedores.
Aqui foi de boa...Depois da correção.
Editar o arquivo hbgd.hbp.

-depimplibs=gd:../bin/bgd.dll{!(msvc|pocc|mingw)|hbdyn}
-depimplibs=gd:../lib/bgd.lib{(msvc|pocc|mingw)&!hbdyn}
Trocar por
-depimplibs=gd:../bin/libgd.dll{!(msvc|pocc|mingw)|hbdyn}
-depimplibs=gd:../lib/libgd.lib{(msvc|pocc|mingw)&!hbdyn}

Tava bgd.dll e é libgd.dll (simples)

Código: Selecionar todos

C:\dev\hb32\contrib\hbgd>hbmk2 hbgd.hbp
hbmk2: Dependência 'gd' encontrado: c:\msys64\mingw64\include
hbmk2: Biblioteca de importação criada: liblibgd.a <=
       c:\msys64\mingw64\bin\libgd.dll
hbmk2: Alvo atualizado: libhbgd.a
Saudações,
Itamar M. Lins Jr.

uHttpd - Servidor HTTP em Harbour

Enviado: 09 Nov 2024 21:17
por Itamar M. Lins Jr.
Olá!
Continuando... Tela de login em html.
2024-11-09_20-55-48.png
Baixe esses dois arquivos e coloque na pasta home dele.
Por exemplo:
Seu programa está na pasta c:\fontes\meusist\
Então basta vc criar essas sub pastas:
c:\fontes\meusist\home
c:\fontes\meusist\logs
c:\fontes\meusist\images
c:\fontes\meusist\modules
c:\fontes\meusist\sessions
Dentro da pasta home tem a pasta cgi-bin.
c:\fontes\meusist\home\cgi-bin\
login.rar
Tela de login com CSS.
(1.34 KiB) Baixado 70 vezes
Saudações,
Itamar M. Lins Jr.

uHttpd - Servidor HTTP em Harbour

Enviado: 09 Nov 2024 21:32
por Itamar M. Lins Jr.
Olá!
Até ai nada de mais.
Agora vamos parar o servidor uHttpd usando (ALT+C) ou fechando a janela.
Editar o arquivo uhhtpd.ini e adicionar index.hrb na linha 28.

Código: Selecionar todos

# --- default index files
DirectoryIndex   = index.html index.htm index.hrb
E vamos colocar Html+CSS no PRG e compilar tudo!
Renomear o arquivo index.html para index.prg (na pasta home)
E adicione essas 4 linhas de código, nele.( a linha <!DOCTYPE html>) tá lá, não precisa. Só até TEXT TO VAR cHtml

Código: Selecionar todos

#xcommand TEXT TO VAR <var> => #pragma __stream|<var>:=%s
#xcommand ENDTEXT => #pragma __endtext

Function HRBMAIN(...)

TEXT TO VAR cHTML

<!DOCTYPE html>
E no final as 2 linhas:

Código: Selecionar todos

</html>
 
ENDTEXT

Return cHTML 
</html> tá lá, não precisa.
Vamos compilar gerar o código .hrb

Código: Selecionar todos

>hbmk2 index.prg -gh
Harbour 3.2.0dev (r2410180556)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'index.prg'...
Lines 44, Functions/Procedures 1
Generating Harbour Portable Object output to 'index.hrb'... Done.
Agora basta o refresh no navegador e vc verá a mesmíssima página, só que PRG misturado com HTML+CSS.

Saudações,
Itamar M. Lins Jr.

uHttpd - Servidor HTTP em Harbour

Enviado: 09 Nov 2024 21:38
por Itamar M. Lins Jr.
Olá!
Outra forma de colocar as (TAGs) do HTML no .prg é usando strings.

Código: Selecionar todos

Function hrbmain(...)
LOCAL cHtml 
cHtml := '<!DOCTYPE html>'
cHtml += '<html lang="en">'
cHtml += '<head>'
cHtml += '<meta charset="UTF-8">'
cHtml += '<meta name="viewport" content="width-device-width", initial-scale="1.0">'
cHtml +=  '<link rel="stylesheet" href="styles.css">'
E no final:

Código: Selecionar todos

return cHtml
Então mesclamos DO WHILE, FOR NEXT, etc no código e retornamos o resultado em cHTML

Saudações,
Itamar M. Lins Jr.

uHttpd - Servidor HTTP em Harbour

Enviado: 09 Nov 2024 22:31
por Itamar M. Lins Jr.
Olá!
Quando vamos trabalhar na WEB, passamos mais tempo, aprendendo HTML e CSS e JavaScript, do quê de fato usando o Harbour.
Então o JavaScript é quem vai VALIDAR muitos campos de entrada de dados na página.
Agora vamos modificar a linha da <tag> <form action="#"> para <form action="cgi-bin/login.hrb">
E colocar NOME nas variáveis do HTML! no arquivo index.prg.
Adicionar o nome -> name="cEmail" e name="cSenha"

<input type="email" id="email" name="cEmail" placeholder="Email" required>
<input type="password" id="password" name="cSenha" placeholder="Senha" required>

É como se fosse o GET ai do PRG GET cEMAIL e GET cSENHA
Agora vamos criar o arquivo login.prg e depois compilar e colocar na pasta home\cgi-bin\

Código: Selecionar todos

Function hbmain(...)
local cHtml := '<html>'

cLogin := AllTrim(uhttpd_GetField( "cEmail" ))
cSenha := AllTrim(uhttpd_GetField( "cSenha" ))

cHtml += '<h1>' + cLogin+ '</h1>'
cHtml += '<h3>' + cSenha + '</h3>'
cHtml += '</html>'

return cHtml

ALGUMAS TAGs do código embola com o HTML do forum a tag br por exemplo entre <> está no código só que ela não é mostrada. depois de </h1>tem br(pular linha)

Código: Selecionar todos

hbmk2 login.prg -gh
Harbour 3.2.0dev (r2410180556)
Copyright (c) 1999-2024, https://harbour.github.io/
Compiling 'login.prg'...
Lines 11, Functions/Procedures 1
Generating Harbour Portable Object output to 'login.hrb'... Done.
...
move login.hrb cgi-bin
        1 arquivo(s) movido(s).
Repare que o padrão do form é GET e vai na linha do navegador, o email e senha. Isso não é bom, nisso começamos a entender a diferença do metodo GET e do método POST.
2024-11-09_22-28-07.png
E tem mais tags para mandar variáveis do form para o servidor com a tag <HIDEN>. Já outro assunto!

Saudações,
Itamar M. Lins Jr.