FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Download internet file without interference
Posts: 246
Joined: Sat Mar 03, 2007 08:42 PM
Download internet file without interference
Posted: Mon Nov 17, 2008 05:36 PM
Hello,

Horizon wrote:Is it possible to show progress bar (for example in message bar) while reading at ReadAll() method?

I download big files from www. Users confuse if there is a problem or not.
Sorry, I don't know.

Patrick
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Download internet file without interference
Posted: Mon Nov 17, 2008 06:23 PM

Hi,

Where can i find the more documentation about TIpClientHttp. Is it from Windows Controls or someone writes it?

Thanks

Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Download internet file without interference
Posted: Tue Nov 18, 2008 06:59 PM
Hi,

I finally found the tip class in XHB source directory.

I have done some modifications in wfSaveURL function like below. It works perfectly with progressbar.



.
.
.
// oProg : Progress Bar is created before

cURL := "http://www.test.be/test.txt"
cSaveAs := "newfile.txt"
nFileSize := Get_File_Size(cURL)

IF wfReadURL(cURL, cSaveAs, oProg, nFileSize) 
   ... File is there AND downloaded as cSaveAs
ELSE 
   ... File is not there 
ENDIF 
.
.
.


FUNCTION wfSaveURL(cUrl, cSaveAs, oProg, nFileSize) 
  LOCAL oConn, lReturn:=.T. 
  DEFAULT oProg := 0
  
  IF Upper(Left(cUrl,4))#"HTTP" 
     cUrl:="http://"+cUrl 
  ENDIF 
  TRY 
   oConn := TipClientHttp():New(TURL():New(cUrl)) 
   oConn:nConnTimeout := 20000 
   IF !EMPTY(oProg) .and. !EMPTY(nFileSize)
   	oConn:exGauge := { | done, size| wfProgress(done, size, oProg ) }
   	oProg:SetRange( 0, 99 ) 
   ENDIF

   IF oConn:Open(cURL) 
      oConn:ReadToFile(cSaveAs,,nFileSize) 
      oConn:Close() 
   ENDIF 
    
  CATCH 
   lReturn := .F.
  END 
  
RETURN lReturn

function wfProgress(nReceived,nTotalSize,ooProg)
ooProg:SetPos(INT(nReceived/nTotalSize*100)+1)
SysRefresh()
return

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, 80 )
	
	IF INetErrorCode( pSocket ) <> 0
	   ? "Socket error:", INetErrorDesc( pSocket )
	   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
Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 654
Joined: Fri Oct 21, 2005 05:54 AM
Download internet file without interference
Posted: Wed Nov 19, 2008 04:09 AM
Hello Mr.Horizon

A Small correction :

IF wfReadURL(cURL, cSaveAs, oProg, nFileSize) 
   ... File is there AND downloaded as cSaveAs


should be

IF wfSaveURL(cURL, cSaveAs, oProg, nFileSize) 
   ... File is there AND downloaded as cSaveAs


And oProg is an object. Is it not ? You have defined it as

DEFAULT oProg := 0


The :exGauge is not working with FWH. I don't know why...
And :SetRange and :SetPos methods are not there in TMETER
class of FWH. Instead :SetTotal and :Set methods are there. I changed
them as required in your source. Still the Progress bar is not seen.

Are you running this code in FWH or in terminal mode ?

>I finally found the tip class in XHB source directory.

One more request. May I get a copy of TIP CLASS SOURCE?

Thanks,

- Ramesh Babu P
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Download internet file without interference
Posted: Wed Nov 19, 2008 07:57 AM
Hi Ramesh,

I use xHarbour Builder Sep. 2008 and FWH 8.10.

IF wfSaveURL(cURL, cSaveAs, oProg, nFileSize) 
   ... File is there AND downloaded as cSaveAs


You are right. It should be.

Yes oProg is a Progress Bar object. like

@ 80, 010 PROGRESS oProg POSITION 0 SIZE 212, 12 PIXEL


DEFAULT oProg := 0


It might be DEFAULT oProg := NIL. It works now.

:exGauge works only :ReadtoFile() and :WriteToFile() methods.
You may use Progress instead of TMeter. :SetRange and :SetPos works now in Progress.

I will send a working example for you. It may help you.
Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Download internet file without interference
Posted: Wed Nov 19, 2008 08:28 AM
It is the working example.

#include "FiveWin.ch"

//----------------------------------------------------------------------------//

function Main()
	local oDlg,  oBtnDwn, oBtnOk

	DEFINE DIALOG oDlg 
@ 1, 1 BUTTON oBtnDwn PROMPT "Download" ACTION Download(oProg)
@ 2.5, 1 PROGRESS oProg POSITION 0 SIZE 100, 12 
@ 3, 1 BUTTON oBtnOk PROMPT "Quit" ACTION oDlg:End() 
	ACTIVATE DIALOG oDlg CENTER
	
return nil

PROCEDURE Download
LOCAL cURL, cSaveAs, nFileSize
cURL := "http://www.fivetechsoft.com/files/utilities/prometheus.exe"
cSaveAs := "prometh.exe"
nFileSize := Get_File_Size(cURL)

IF wfSaveURL(cURL, cSaveAs, oProg, nFileSize) 
	? "Downloaded" //   ... File is there AND downloaded as cSaveAs
ELSE 
   ? "Can not downloaded " //... File is not there 
ENDIF 
RETURN


FUNCTION wfSaveURL(cUrl, cSaveAs, oProg, nFileSize) 
  LOCAL oConn, lReturn:=.T. 
  DEFAULT oProg := NIL
  DEFAULT nFileSize := 0
  
  IF Upper(Left(cUrl,4))#"HTTP" 
     cUrl:="http://"+cUrl 
  ENDIF 
  TRY 
   oConn := TipClientHttp():New(TURL():New(cUrl)) 
   oConn:nConnTimeout := 20000 
   IF !EMPTY(oProg) .and. !EMPTY(nFileSize)
   	oConn:exGauge := { | done, size| wfProgress(done, size, oProg ) }
   	oProg:SetRange( 0, 99 ) 
   ENDIF

   IF oConn:Open(cURL) 
      oConn:ReadToFile(cSaveAs,,nFileSize) 
      oConn:Close() 
   ENDIF 
    
  CATCH 
   lReturn := .F.
  END 
  
RETURN lReturn

function wfProgress(nReceived,nTotalSize,ooProg)
ooProg:SetPos(INT(nReceived/nTotalSize*100)+1)
SysRefresh()
return

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, 80 )
	
	IF INetErrorCode( pSocket ) <> 0
	   ? "Socket error:", INetErrorDesc( pSocket )
	   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
Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 125
Joined: Wed Oct 19, 2005 02:28 PM
Re: Download internet file without interference
Posted: Fri May 01, 2009 01:47 PM

Hello All,

I am on Harbour 1.1.0dev (Rev. 10716)

I have hbtip.lib in my buildh.bat and all programs compile ok except when
I try to add turl code to my program.

If I add this to my program:

oConn := TipClientHttp():New(TURL():New(cUrl))

I get this error:

Error: Unresolved external '_pcre_config' referenced from H:\ZHARBOUR\LIB\HBRTL.LIB|hbregex
Error: Unresolved external '_pcre_stack_malloc' referenced from H:\ZHARBOUR\LIB\HBRTL.LIB|hbregex
Error: Unresolved external '_pcre_stack_free' referenced from H:\ZHARBOUR\LIB\HBRTL.LIB|hbregex

Any ideas?

Thanks

Dave Zowasky
Com1 Software, Inc.
http://www.com1software.com
information@com1software.com
330 653-3771
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Download internet file without interference
Posted: Sun May 03, 2009 12:30 AM

Dave,

You have to link Harbour hbpcre.lib

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 208
Joined: Wed Dec 03, 2008 04:48 PM
Re: Download internet file without interference
Posted: Sun May 03, 2009 01:59 AM

Was anybody able to run the example "horizon" posted?
For me it returns "Downloaded" but nothing wa sactualy downloaded.

Posts: 125
Joined: Wed Oct 19, 2005 02:28 PM
Re: Download internet file without interference
Posted: Sun May 03, 2009 01:47 PM

Antonio,

hbpcre.lib fixed my problem, however now getting:

HB_FUN_INETINIT'
HB_FUN_INETCONNECT
HB_FUN_INETERRORCODE
HB_FUN_INETERRORDESC

I have hbtip.lib linking in.
I thought hbtip.lib had these functions?

Thanks

Dave Zowasky
Com1 Software, Inc.
http://www.com1software.com
information@com1software.com
330 653-3771
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Download internet file without interference
Posted: Mon May 04, 2009 07:12 AM

Hi !,

Can somebody send me the HBTIP.LIB for Harbour and their sources? I cna't connect to CVS... :(

Regards.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Download internet file without interference
Posted: Mon May 04, 2009 10:09 AM

Dave,

You need to link XHB.lib

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Download internet file without interference
Posted: Mon May 04, 2009 10:13 AM
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: Download internet file without interference
Posted: Mon May 04, 2009 05:29 PM

Antonio => Thanks a lot :D

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 125
Joined: Wed Oct 19, 2005 02:28 PM
Re: Download internet file without interference
Posted: Tue May 26, 2009 01:58 PM

Antonio,

Compiles great now, Thanks :D

Dave Zowasky
Com1 Software, Inc.
http://www.com1software.com
information@com1software.com
330 653-3771