uHttpd - Servidor HTTP em Harbour
Moderador: Moderadores
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uHttpd - Servidor HTTP em Harbour
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. Conforme for colocarei aqui, algum exemplo de uso.
Foi compilado em 64Bits!
Saudações,
Itamar M. Lins Jr.
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. Conforme for colocarei aqui, algum exemplo de uso.
Foi compilado em 64Bits!
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uHttpd - Servidor HTTP em Harbour
Olá!
Quando rodamos ele, fica o processo (daemon) esperando uma requisição via algum navegador(Chrome/Edger/Firefox...) 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.
Quando rodamos ele, fica o processo (daemon) esperando uma requisição via algum navegador(Chrome/Edger/Firefox...) 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.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uHttpd - Servidor HTTP em Harbour
Olá!
Instalando a GDLIB(lib gráfica) para gerar imagens no servidor.(tô vendo o exemplo do contador de páginas.)
No msys2(prompt)
Saudações,
Itamar M. Lins Jr.
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%
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uHttpd - Servidor HTTP em Harbour
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)
Saudações,
Itamar M. Lins Jr.
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
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uHttpd - Servidor HTTP em Harbour
Olá!
Continuando... Tela de login em html. 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\ Saudações,
Itamar M. Lins Jr.
Continuando... Tela de login em html. 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\ Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uHttpd - Servidor HTTP em Harbour
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.
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
E no final as 2 linhas:
</html> tá lá, não precisa.
Vamos compilar gerar o código .hrb
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.
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
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>
Código: Selecionar todos
</html>
ENDTEXT
Return cHTML
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.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uHttpd - Servidor HTTP em Harbour
Olá!
Outra forma de colocar as (TAGs) do HTML no .prg é usando strings.
E no final:
Então mesclamos DO WHILE, FOR NEXT, etc no código e retornamos o resultado em cHTML
Saudações,
Itamar M. Lins Jr.
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">'
Código: Selecionar todos
return cHtmlSaudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
uHttpd - Servidor HTTP em Harbour
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\
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)
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.
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.
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
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).
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.