Página 1 de 1

Puxar atualizacao sem FTP

Enviado: 22 Mai 2010 23:20
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.

Re: Puxar atualizacao sem FTP

Enviado: 22 Mai 2010 23:42
por JoséQuintas
Não sei se entendi direito.
Ao invés de ftp, use http.

Re: Puxar atualizacao sem FTP

Enviado: 23 Mai 2010 11:13
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

Re: Puxar atualizacao sem FTP

Enviado: 26 Mai 2010 19:53
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.

Re: Puxar atualizacao sem FTP

Enviado: 16 Jun 2010 12:45
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.

Re: Puxar atualizacao sem FTP

Enviado: 29 Nov 2010 18:43
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

Re: Puxar atualizacao sem FTP

Enviado: 29 Nov 2010 23:05
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.

Re: Puxar atualizacao sem FTP

Enviado: 12 Dez 2010 18:58
por MarcosV
Olá Pessoal,

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

Obrigado

Re: Puxar atualizacao sem FTP

Enviado: 12 Dez 2010 23:14
por sygecom
Olá Marcos,
Essa função não é do xHarbour, post como você está usando !

Re: Puxar atualizacao sem FTP

Enviado: 13 Dez 2010 00:03
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

Re: Puxar atualizacao sem FTP

Enviado: 14 Dez 2010 15:02
por sygecom
O arquivo existe no endereço da URL ? Cuidado que é case-sensitive.

Re: Puxar atualizacao sem FTP

Enviado: 15 Dez 2010 02:32
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

Re: Puxar atualizacao sem FTP

Enviado: 15 Dez 2010 11:04
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......

Re: Puxar atualizacao sem FTP

Enviado: 17 Dez 2010 09:42
por mbrigatti
Pessoal alguém ai tem um exemplo de como consultar se um determinado arquivo pertence ao diretório corrente do FTP ?

Re: Puxar atualizacao sem FTP

Enviado: 22 Dez 2010 13:29
por sygecom
Olá Marcelo,
Pode usar:
oFtp:listFiles() ou oFTP:List() para obter uma lista de arquivos da pasta corrente