Barra de Progresso com TipClientHttp()

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

gilsonpaulo
Usuário Nível 3
Usuário Nível 3
Mensagens: 135
Registrado em: 02 Fev 2008 11:30
Localização: Quatro Barras

Barra de Progresso com TipClientHttp()

Mensagem por gilsonpaulo »

Boa noite, consegui com pesquisa aqui no forum utilizar com sucesso a TipClientHttp().

Código: Selecionar todos

Function ver_update

	local oHttp, oExe, oEmpresa, oExecutavel, oUrl, oTamanho, oProgress
	
	use mat shared alias mat
	go top
	
	oEmpresa:= alltrim(mat->update)
	oExecutavel:= alltrim(mat->executavel)

	close mat
	
	oUrl := "http://www.gsinformatica.inf.br/"+oEmpresa+"/"+oExecutavel
	
	oHttp:= TipClientHttp():New( "http://www.gsinformatica.inf.br/"+oEmpresa+"/"+oExecutavel ) 
   
	oHttp:open()

	oExe := oHttp:readAll()
	
	oHttp:close()
	
	MemoWrit(oExecutavel,oExe)
	
	EXECUTE FILE oExecutavel
	Main.release
	
Return
Agora quero colocar uma barra de progresso neste download, mas não faço a minima ideia de como implementar.

Desde ja agradeço qualquer ajuda.
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Barra de Progresso com TipClientHttp()

Mensagem por Abel »

Ola,

nao consegui fazer usando a tip,
fiz pela wapi do maligno, conforme vai baixando vou verificando o tamanho do executavel baixado, e vou controlando a barra ...
da uma pesquisada na wapi tem muita coisa interessante, vc acha aqui no forum.
eu nao sei como colocar links aqui rs rs

Abel
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Barra de Progresso com TipClientHttp()

Mensagem por sygecom »

Procure por:
:exGauge

Exemplo:

Código: Selecionar todos

function main()
cURL:='www.meusite.com.br/arquivo.exe'
nTAMANHO:= 121222  // tamanho do arquivo no site
oConn := TipClientHttp():New(TURL():New(cURL))
oConn:nConnTimeout := 10000
oConn:exGauge := { | done, size| ShowGauge(done, size, nTAMANHO, ftpfile, oBar, oSAY ) }
return nil

****************************************************************
PROCEDURE SHOWGAUGE( nSent, nSize, wTotal, ftpfile, oBar, oSAY )
****************************************************************
IF nSent > 0
   hwg_processmessage() // uso com Hwgui
   eval( {||oBar:Set(,(nSent/wTotal)*100),.t.} ) // uso com Hwgui

   oSAY:SetText("Arquivo...: " +ftpfile+" "+ STR(nSent/1000000)+" Mb de: " + str(wTotal/1000000)+ " Mb "+str((nSent/wTotal)*100,4) +" %")  // uso com Hwgui
   oSAY:Refresh()  // uso com Hwgui
ENDIF
RETURN
Se ficar alguma duvida post aqui.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Barra de Progresso com TipClientHttp()

Mensagem por Abel »

Ola, Leornado.

Como no post acima, eu tinha feito minha rotina de download pelo wapi do maligno,
mas agora q atualizei os clientes, to tento um problema.

Muitos antivirus bloqueiam o EXE nao conseguindo fazer o download.

Vi a rotina pelo HTTP, e deu certo, mas nao consegui gerar a barra de progresso como no exemplo acima. Eu utilizo harbour 3.1 nigthy.

nao utilizo hwgui, sera que é por isso q nao deu certo.

ficou assim:

Código: Selecionar todos

PROCEDURE SHOWGAUGE( nSent, nSize, wTotal, ftpfile, oBar, oSAY )
rN_T=1
//IF nSent > 0
   @ 0,rN_T++ SAY 'A' //hwg_processmessage() // uso com Hwgui
   eval( {||oBar:Set(,(nSent/wTotal)*100),.t.} ) // uso com Hwgui

   oSAY:SetText("Arquivo...: " +ftpfile+" "+ STR(nSent/1000000)+" Mb de: " + str(wTotal/1000000)+ " Mb "+str((nSent/wTotal)*100,4) +" %")  // uso com Hwgui
   oSAY:Refresh()  // uso com Hwgui
//ENDIF
RETURN
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Barra de Progresso com TipClientHttp()

Mensagem por Abel »

ola, pessoal,
consegui fazer funcionar a showgauge para exibir uma barra de progresso durante o download utilizando tipclienthttp.

Código: Selecionar todos

   oHttp:= TipClientHttp():New(TURL():New(rA_URL)) 
   oHttp:nConnTimeout := 20000
   //
   oHttp:Open()
   oHttp:exGauge := { |done, size| ShowGauge(done, size, ntamanho) } 
   oHttp:ReadToFile( rA_NOMEEXE ) // esta linha resolveu tudo
   oHttp:close()
Minha duvida é a seguinte:
- usando HTTP: pode acontecer de algum antivirus barrar o download ?

- quando eu usava a wapi.exe do maligno alguns antivirus removiam o EXE, ou ate mesmo abriam um popup indicando a wapi.exe como arquivo suspeito, e agora sera que tem algum perigo do antivirus remover o EXE do meu programa, ja que agora faço direto do sistema ?


Abraços,
ABEL
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Barra de Progresso com TipClientHttp()

Mensagem por sygecom »

Olá Abel,
Abel escreveu: Minha duvida é a seguinte:
- usando HTTP: pode acontecer de algum antivirus barrar o download ?
Pode barrar sim, e se usar muitas vez o HTTP abrindo e fechando em pouco tempo algumas hospedagem bloqueiam o IP que está tentando fazer isso por alguns minutos, um exemplo é a KingHost que faz esse procedimento, digo isso por que já passei por algo assim, agora zipei em pacotes em vez de baixar arquivo por arquivo.
- quando eu usava a wapi.exe do maligno alguns antivirus removiam o EXE, ou ate mesmo abriam um popup indicando a wapi.exe como arquivo suspeito, e agora sera que tem algum perigo do antivirus remover o EXE do meu programa, ja que agora faço direto do sistema ?
Por isso nunca passei, quando aconteceu de remover meu EXE foi por algum virus se instalar dentro da pasta do meu sistema, ai o anti-virus foi lá e exclui todos os EXE da pasta onde estava o virus.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Barra de Progresso com TipClientHttp()

Mensagem por Abel »

sygecom,

agora q estou aprendendo a utilizar melhor alguns recursos do harbour,
acho q o melhor é baixar por HTTP do que pelo wapi.exe, nao é ?
pois HTTP usa a porta 8080 é mais facil de passar pelo firewall e pelos antivirus.

eu tb estou zipando os arquivos e apos baixar, descompacto.

abracos e um otimo ano novo,
ABEL
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Barra de Progresso com TipClientHttp()

Mensagem por sygecom »

Com certeza usando pela TIP.LIB fica melhor, mais profissional e pega os retornos caso de algum problema...

Parte do meu código:

Código: Selecionar todos

   TRY
     oConn := TipClientHttp():New(TURL():New(cURL))
     oConn:nConnTimeout := 10000
     oConn:exGauge := { | done, size| ShowGauge(done, size, nTAMANHO, ftpfile, oBar, oSAY ) }

     IF oConn:Open(cURL)
        oConn:ReadToFile(fdestino,,nFileSize)
        oConn:Close()
     ENDIF
     lRet:=.T.
   CATCH
     lRet:=.F.
   END

//showmsg(lRet)

   oSAY:SetText('Aguarde, Conferindo arquivo baixado...')
   oSAY:Refresh()


   IF lRet
      IF FILE(fdestino)
         cCONFERE:=MEMOREAD(fdestino)
         IF AT('<html>',cCONFERE)>0 .AND. AT('</html>',cCONFERE)>0
            IF AT('Erro 403',cCONFERE)>0 .OR.;  // acesso negado
               AT('Erro 404',cCONFERE)>0 .OR.;  // pagina não encontrada
               AT('Erro 500',cCONFERE)>0 .OR.;  // Erro Interno de Servidor
               AT('Página Não Encontrada',cCONFERE)>0 // pagina não encontrada

               FERASE(fdestino) // EXCLUI POR BAIXOU COM PROBLEMA
               lRet:=.F.
            ENDIF
         ENDIF
      ELSE
         lRet:=.F.
      ENDIF
   ENDIF
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Barra de Progresso com TipClientHttp()

Mensagem por Abel »

tenho uma duvida antiga, que inclusive vendo seu codigo e melhorando o meu
voltou a dar. Pq os comandos TRY, CATCH, END nao compilam no meu harbour.

da erro:
" syntax error at 'end' "

se eu retirar o END da:
ERROR e0020 incomplete statement or unbalanced delimiters

utilizo o harbour 3.1 nigthy

Abracos,
ABEL
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Barra de Progresso com TipClientHttp()

Mensagem por sygecom »

Olá Abel,

Esses comandos são do xHarbour e o Harbour implantou isso em: hbcompat.ch, então se você incluir no cabeçalho do seu .PRG a linha:
#include "hbcompat.ch"
Deve resolver com a linha acima, apenas certifique se o .CH está em suas pastas de INCLUDE, por que originalmente acho que está na pasta \HARBOUR\CONTRIB\XHB

Esse TRY, CATCH é equivalente que tinhamos no CLIPPER:
BEGIN SEQUENCE
<statements>...
IF lBreakCond
BREAK
ENDIF
RECOVER
<recovery statements>...
END
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Barra de Progresso com TipClientHttp()

Mensagem por Abel »

puxa legal,
nunca usei begin sequence mas pelo visto é muito interessante,
coloquei o #include "hb_compat.ch" e compilou normalmente,
minha duvida foi a seguinte:

tinha um outro prg que tb adaptei para usar try catch e tambem tive que colocar o include neste prg pq dava erro. Existe alguma forma de coloca-lo apenas uma vez e utilizar o comando try em qualquer prg do projeto ?

Abracos e desde ja agradeço toda a atencao,
ABEL
Abel
Usuário Nível 3
Usuário Nível 3
Mensagens: 332
Registrado em: 14 Mar 2012 13:16
Localização: sao paulo / sp

Barra de Progresso com TipClientHttp()

Mensagem por Abel »

sygecom,
fazendo alguns testes com os novos comandos que estou aprendendo a usar
nao estou conseguindo fazer os devidos testes, veja:
BEGIN SEQUENCE
oUrl = TUrl():New( cUrl ) //

// nenhuma url q eu coloque faz com que ele entre no empty
// ate mesmo url que nao existe

IF EMPTY( oUrl )
ALERT2('PROBLEMA 1')
BREAK
ENDIF
oCli = TIpClientHttp():New( oUrl )
//
// aqui tambem ele nunca entre no IF abaixo
//
IF EMPTY( oCli )
ALERT2('PROBLEMA 2')
BREAK
ENDIF
oCli:nConnTimeout = 20000

IF !oCli:Open( oUrl ) // ate mesmo com URL inexistente nao exibe a msg
ALERT2('PROBLEMA 3')
BREAK
ENDIF

cRes := oCli:Read()
oCli:Close()
END SEQUENCE
porque sera que ele nunca exibe as mensagens de problema uma vez que a url nem existe ?

Agradeço mais uma vez,
ABEL
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Barra de Progresso com TipClientHttp()

Mensagem por HASA »

:-O
Boa noite, desculpe cair de paraquedas no post, mas... os exemplos acima são para MINIGUI ou Hwgui ? Me parecem ser para HWGUI, se for mesmo tem algum exemplo para Minigui ?
:xau
HASA
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Barra de Progresso com TipClientHttp()

Mensagem por HASA »

:(
Olá pessoal, ninguem tem um pequeno sample ?
:-O
Hasa
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Barra de Progresso com TipClientHttp()

Mensagem por Toledo »

Veja este pequeno exemplo:

Código: Selecionar todos

#include "hmg.ch"

Function Main

   DEFINE WINDOW Form_1 ;
          AT 0,0 ;
          WIDTH 530 HEIGHT 154 ;
          TITLE "Exemplo de Barra de Progresso com TipClientHttp" ;
          MAIN

          @ 10,10 BUTTON Button_1 ;
                  CAPTION "Copiar Arquivo" ;
                  ACTION {|| Copiar_Arquivo()} ;
                  WIDTH 100 ;
                  HEIGHT 28

          @ 70,10 PROGRESSBAR Progress_1 ;
                  RANGE 0 , 100 ;
                  WIDTH 500 ;
                  HEIGHT 30

	END WINDOW

	CENTER WINDOW Form_1

	ACTIVATE WINDOW Form_1

Return

Function Copiar_Arquivo()
cUrl:='https://pctoledo.org/temp/clipper_v52e.zip'
oHttp := TipClientHttp():New(cUrl)
oHttp:nConnTimeout := 20000
nTamanhoArquivo:=2268297
oHttp:exGauge := { | nSent, nTotal | HttpProgress(nSent, nTotal, nTamanhoArquivo) }
IF oHttp:Open(cUrl)
   cArq:=oHttp:oUrl:cFile
   oHttp:ReadToFile(cArq)
   oHttp:Close()
   MsgInfo("Arquivo copiado com sucesso!")
ENDIF
Return Nil

Function HttpProgress(nSent, nTotal, nTamanhoArquivo)
if nSent>0
 Form_1.Progress_1.Value:=((nSent/nTamanhoArquivo)*100)
endif
return .t.
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Responder