Puxar atualizacao sem FTP

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Puxar atualizacao sem FTP

Mensagem por marcos.gurupi »

Eh possivel eu atualizar meus sistemas no cliente sem o uso de FTP? Caso sim. Por favor poste exemplos. Obrigado

Marcos Roberto.
Marcos Roberto
NetService Software
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Re: Puxar atualizacao sem FTP

Mensagem por JoséQuintas »

Não sei se entendi direito.
Ao invés de ftp, use http.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Puxar atualizacao sem FTP

Mensagem por sygecom »

marcos.gurupi escreveu:Eh possivel eu atualizar meus sistemas no cliente sem o uso de FTP? Caso sim. Por favor poste exemplos. Obrigado
Olá Marcos,
É possivel sim, pode usar Http para baixar, segue abaixo o exemplo (tens que linkar a TIP.LIB):
#include "common.ch"
#include "Directry.ch"
#include "hwgui.ch"

Exemplo de uso:

Código: Selecionar todos

IF !FILE("res\curiosidades.doc")
   DONWLOAD_FILE("/atualiza/res","curiosidades.doc","res\curiosidades.doc")
ENDIF
Código:

Código: Selecionar todos

************************************************
PROCEDURE Donwload_File(ftpdir,ftpfile,fdestino)
************************************************
Local cURL, cSaveAs, nFileSize, vALIAS, lRet:=.F.
Private oBar,oDlg,nSize, oConn

cURL := "http://www.sygecom.com.br"+ftpdir+"/"+ftpfile

Private oDlgHabla:=nil
MsgRun("Aguarde Procurando Atualizações...")

Fim_Run()

cTamanho := Get_File_Size(cURL)

TRY
  oConn := TipClientHttp():New(TURL():New(cURL))
  oConn:nConnTimeout := 10000
  oConn:nDefaultPort := 8080
  oConn:exGauge := { | done, size| ShowGauge(done, size, cTamanho, ftpfile ) }

  IF oConn:Open(cURL)
     oConn:ReadToFile(fdestino,,nFileSize)
     oConn:Close()
  ENDIF
  lRet:=.T.
CATCH
  MsgStop("Erro ao Tentar baixar a atualização, Favor tente mais tarde","Aviso do Sistema")
END

oDlg:Close()

Fim_Run()
RETURN(lRet)

Procedure ShowGauge( nSent, nSize, wTotal, ftpfile )
IF nSent > 0
   hwg_processmessage()
   eval( {||oBar:Set(,(nSent/wTotal)*100),.t.} )
   @ 50,120 say "Arquivo...: " +ftpfile+" "+ STR(nSent)+" Byts de: " + str(wTotal)+ " Byts "+str((nSent/wTotal)*100,4) +" %" SIZE 500,22
ENDIF
RETURN

*****************************
Procedure Aguarde(vTIT,vMENS)
*****************************

INIT DIALOG oDlg TITLE vTIT AT 45,30 SIZE 600,210 NOEXIT STYLE DS_CENTER + WS_VISIBLE
@ 50,20 say vMENS  size 300,40 ;
FONT HFont():Add( '',0,-20,400,,,)
@ 50,60 PROGRESSBAR oBar OF oDlg SIZE 510,50 BARWIDTH 10000
oDlg:Activate(.t.)

***************************
FUNCTION GET_FILE_SIZE(cURL)
***************************
LOCAL cBuffer, cRequest, cResponse, nBytes, pSocket, aRequest
LOCAL crlf := CHR(13)+CHR(10), Result := 0, oUrl
// initialize sockets system and connect to server
DEFAULT cURL:=""
oUrl := tURL():New( cUrl )
IF Empty( oUrl )
   Return 0
ENDIF
IF Lower( oUrl:cProto ) <> "http"
   Return 0
ENDIF

INetInit()
pSocket := INetConnect( oUrl:cServer, 8080 )

IF INetErrorCode( pSocket ) <> 0
//   MsgInfo("Erro ao conectar ao Socket, error:" + INetErrorDesc( pSocket ),"Aviso do Sistema")
   INetCleanUp()
   RETURN 0
ENDIF

crlf := INETCRLF()

// send HTTP request to server
cRequest := "HEAD "+oUrl:BuildAddress() + " HTTP/1.1" + CRLF + ;
            "Host: "+oUrl:cServer+ CRLF + ;
            "User-Agent: HTTP-Get-File-Size" + CRLF + ;
            "Connection:close" + CRLF + ;
             CRLF
nBytes   := INetSend( pSocket, cRequest )
cBuffer  := Space(4096)
cResponse:= ""

// get HTTP response from server
DO WHILE ( nBytes > 0 )
   nBytes    := INetRecv( pSocket, @cBuffer )
   cResponse += Left( cBuffer, nBytes )
   cBuffer   := Space(4096)
ENDDO

// disconnect and cleanup memory
INetClose( pSocket )
INetCleanUp()

aRequest := HB_ATokens(cResponse, CRLF)
clear
nAt := Ascan(aRequest,{|x|LEFT(LTRIM(X),15)="Content-Length:"})
IF nAt>0
   Result := VAL(SUBSTR(aRequest[nAt],17))
ENDIF
RETURN RESULT
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
marcos.gurupi
Usuário Nível 4
Usuário Nível 4
Mensagens: 939
Registrado em: 06 Jul 2004 11:53
Localização: Gurupi-TO

Re: Puxar atualizacao sem FTP

Mensagem por marcos.gurupi »

AO MULEQUE!!!!
:{ :D :D :D :D :{

Mas jah abuzando de vc. Qual eh o servico q devo instalar no meu windows 2003 para servir meus arquivos para os clientes?

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

Re: Puxar atualizacao sem FTP

Mensagem por sygecom »

marcos.gurupi escreveu: Qual eh o servico q devo instalar no meu windows 2003 para servir meus arquivos para os clientes?
Olá Marcos,

Desculpa não tinha visto essa sua pergunta, eu uso a porta 8080 em conjunto com o Apache e com NO-IP para gerar um link fixo do dinâmico, como uso isso para baixar as atualizações do meu sistema o mesmo quando não ativo pega no servidor segundario que é o servidor do meu site.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Re: Puxar atualizacao sem FTP

Mensagem por Mário Isa »

Leonardo, vc está utilizando com sucesso essa rotina ?

Porque eu utilizo o TIpClientFtp()
e está dando falha / as vezes baixa as vezes nao / já estudei firewall e nao consegui encontrar a razão da falha.

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

Re: Puxar atualizacao sem FTP

Mensagem por sygecom »

Olá Mario,
Uso sim com sucesso, e nunca mais tive problema, alias tive agora a uns dias atraz, mas não foi na rotina em si, mas o fato de ter 285.prg compilado no sistema a rotina de atualização tranca, uma espécie de BUG da TIP.LIB ou sei lá o que, mas ainda não descobri, mas sem duvida é bem melhor que FTP, por que não precisa ficar pendurando o usuário para baixar as minhas atualizações do sistema, quando mais de 10 conectava simultaneamente no FTP, meu servidor abria as pernas e com toda a razão, mas resolvido.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
MarcosV
Usuário Nível 3
Usuário Nível 3
Mensagens: 106
Registrado em: 15 Jun 2005 20:37
Localização: Sorocaba/SP

Re: Puxar atualizacao sem FTP

Mensagem por MarcosV »

Olá Pessoal,

Alguém sabe porque a função: GET_FILE_SIZE(cURL), retorna zero no xHarbour 1.2.1 ?

Obrigado
Marcos Villela
x[H]arbour.org (CVS) | GtWvW+HwGui (CVS) | HbMake | Dbf | Rdd DbfCdx | LeToDb (CVS) (Implantando)
===============================================================
“Quem nunca dormiu à noite e acordou de repente, suando frio e chorando, chorando e
chorando? Se isso lhe aconteceu, então você foi apanhado pelo blues.” (Robert Johnson)
Sweet Home Chicago (Versão Blind Bulldog Blues): www.youtube.com/watch?v=J-V61vQTSZs
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Puxar atualizacao sem FTP

Mensagem por sygecom »

Olá Marcos,
Essa função não é do xHarbour, post como você está usando !
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
MarcosV
Usuário Nível 3
Usuário Nível 3
Mensagens: 106
Registrado em: 15 Jun 2005 20:37
Localização: Sorocaba/SP

Re: Puxar atualizacao sem FTP

Mensagem por MarcosV »

Olá Leonardo, tudo bem com vc ?

Então, estou tentando usar como voce mesmo postou acima, é a ultima função, mas retorna zero.
Eu li voce dizendo em algum post que era um bug no xharbour que vc corrigiu, mas ja faz um tempo, não me lembro com certeza.

Valeu

Código: Selecionar todos

************************************************
PROCEDURE Donwload_File(ftpdir,ftpfile,fdestino)
************************************************
Local cURL, cSaveAs, nFileSize, vALIAS, lRet:=.F.
Private oBar,oDlg,nSize, oConn

cURL := "http://www.sygecom.com.br"+ftpdir+"/"+ftpfile

Private oDlgHabla:=nil
MsgRun("Aguarde Procurando Atualizações...")

Fim_Run()

cTamanho := Get_File_Size(cURL)

TRY
  oConn := TipClientHttp():New(TURL():New(cURL))
  oConn:nConnTimeout := 10000
  oConn:nDefaultPort := 8080
  oConn:exGauge := { | done, size| ShowGauge(done, size, cTamanho, ftpfile ) }

  IF oConn:Open(cURL)
     oConn:ReadToFile(fdestino,,nFileSize)
     oConn:Close()
  ENDIF
  lRet:=.T.
CATCH
  MsgStop("Erro ao Tentar baixar a atualização, Favor tente mais tarde","Aviso do Sistema")
END

oDlg:Close()

Fim_Run()
RETURN(lRet)

Procedure ShowGauge( nSent, nSize, wTotal, ftpfile )
IF nSent > 0
   hwg_processmessage()
   eval( {||oBar:Set(,(nSent/wTotal)*100),.t.} )
   @ 50,120 say "Arquivo...: " +ftpfile+" "+ STR(nSent)+" Byts de: " + str(wTotal)+ " Byts "+str((nSent/wTotal)*100,4) +" %" SIZE 500,22
ENDIF
RETURN

*****************************
Procedure Aguarde(vTIT,vMENS)
*****************************

INIT DIALOG oDlg TITLE vTIT AT 45,30 SIZE 600,210 NOEXIT STYLE DS_CENTER + WS_VISIBLE
@ 50,20 say vMENS  size 300,40 ;
FONT HFont():Add( '',0,-20,400,,,)
@ 50,60 PROGRESSBAR oBar OF oDlg SIZE 510,50 BARWIDTH 10000
oDlg:Activate(.t.)

***************************
FUNCTION GET_FILE_SIZE(cURL)
***************************
LOCAL cBuffer, cRequest, cResponse, nBytes, pSocket, aRequest
LOCAL crlf := CHR(13)+CHR(10), Result := 0, oUrl
// initialize sockets system and connect to server
DEFAULT cURL:=""
oUrl := tURL():New( cUrl )
IF Empty( oUrl )
   Return 0
ENDIF
IF Lower( oUrl:cProto ) <> "http"
   Return 0
ENDIF

INetInit()
pSocket := INetConnect( oUrl:cServer, 8080 )

IF INetErrorCode( pSocket ) <> 0
//   MsgInfo("Erro ao conectar ao Socket, error:" + INetErrorDesc( pSocket ),"Aviso do Sistema")
   INetCleanUp()
   RETURN 0
ENDIF

crlf := INETCRLF()

// send HTTP request to server
cRequest := "HEAD "+oUrl:BuildAddress() + " HTTP/1.1" + CRLF + ;
            "Host: "+oUrl:cServer+ CRLF + ;
            "User-Agent: HTTP-Get-File-Size" + CRLF + ;
            "Connection:close" + CRLF + ;
             CRLF
nBytes   := INetSend( pSocket, cRequest )
cBuffer  := Space(4096)
cResponse:= ""

// get HTTP response from server
DO WHILE ( nBytes > 0 )
   nBytes    := INetRecv( pSocket, @cBuffer )
   cResponse += Left( cBuffer, nBytes )
   cBuffer   := Space(4096)
ENDDO

// disconnect and cleanup memory
INetClose( pSocket )
INetCleanUp()

aRequest := HB_ATokens(cResponse, CRLF)
clear
nAt := Ascan(aRequest,{|x|LEFT(LTRIM(X),15)="Content-Length:"})
IF nAt>0
   Result := VAL(SUBSTR(aRequest[nAt],17))
ENDIF
RETURN RESULT
Marcos Villela
x[H]arbour.org (CVS) | GtWvW+HwGui (CVS) | HbMake | Dbf | Rdd DbfCdx | LeToDb (CVS) (Implantando)
===============================================================
“Quem nunca dormiu à noite e acordou de repente, suando frio e chorando, chorando e
chorando? Se isso lhe aconteceu, então você foi apanhado pelo blues.” (Robert Johnson)
Sweet Home Chicago (Versão Blind Bulldog Blues): www.youtube.com/watch?v=J-V61vQTSZs
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Puxar atualizacao sem FTP

Mensagem por sygecom »

O arquivo existe no endereço da URL ? Cuidado que é case-sensitive.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
MarcosV
Usuário Nível 3
Usuário Nível 3
Mensagens: 106
Registrado em: 15 Jun 2005 20:37
Localização: Sorocaba/SP

Re: Puxar atualizacao sem FTP

Mensagem por MarcosV »

Olá Leonardo,
sygecom escreveu: O arquivo existe no endereço da URL ? Cuidado que é case-sensitive.
Sim o Endereço existe, dá tudo certo, baixa o arquivo normalmente, mas as vezes vem corrompido, e não tenho como checar os bytes por causa da função: GET_FILE_SIZE(cURL) que retorna sempre zero.

Tambem me preocupei com case-sensitive.

Encontrei o topico que voce disse que a função do xhabour estava com problema (pelo que entendi!)
sygecom escreveu: "Unico probleminha que encontrei foi nas rotinas de FTP da TIP.LIB, na função fileSize() , mas foi apenas um detalhe que eu mesmo ajustei ,
Topico: viewtopic.php?f=4&t=9254&p=52356&hilit=xharbour+filesize#p52354
Obrigado pela força
Marcos Villela
x[H]arbour.org (CVS) | GtWvW+HwGui (CVS) | HbMake | Dbf | Rdd DbfCdx | LeToDb (CVS) (Implantando)
===============================================================
“Quem nunca dormiu à noite e acordou de repente, suando frio e chorando, chorando e
chorando? Se isso lhe aconteceu, então você foi apanhado pelo blues.” (Robert Johnson)
Sweet Home Chicago (Versão Blind Bulldog Blues): www.youtube.com/watch?v=J-V61vQTSZs
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Puxar atualizacao sem FTP

Mensagem por sygecom »

Verdade, isso aconteceu quando tive que colocar vairos .PRG novos no sistema, quando alcançava 285 .PRG a função GET_FILE_SIZE() retornava zero, quando eu pegava o código de um .PRG e colocava junto com outro .PRG e compilava dava certo, ou seja, sem explicação alguma a quantidade de arquivos .PRG linkado ao projeto dava PAU na TIP.LIB, durma com esse barulho......
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
mbrigatti
Usuário Nível 2
Usuário Nível 2
Mensagens: 68
Registrado em: 16 Set 2005 08:13
Localização: Piracicaba - SP

Re: Puxar atualizacao sem FTP

Mensagem por mbrigatti »

Pessoal alguém ai tem um exemplo de como consultar se um determinado arquivo pertence ao diretório corrente do FTP ?
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Puxar atualizacao sem FTP

Mensagem por sygecom »

Olá Marcelo,
Pode usar:
oFtp:listFiles() ou oFTP:List() para obter uma lista de arquivos da pasta corrente
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder