uHttpd - Servidor HTTP em Harbour

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

uHttpd - Servidor HTTP em Harbour

Mensagem 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 91 vezes
Conforme for colocarei aqui, algum exemplo de uso.
Foi compilado em 64Bits!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

uHttpd - Servidor HTTP em Harbour

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

uHttpd - Servidor HTTP em Harbour

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

uHttpd - Servidor HTTP em Harbour

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

uHttpd - Servidor HTTP em Harbour

Mensagem 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 69 vezes
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

uHttpd - Servidor HTTP em Harbour

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

uHttpd - Servidor HTTP em Harbour

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

uHttpd - Servidor HTTP em Harbour

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Responder