FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Retrieving info from Url
Posts: 300
Joined: Wed Jul 11, 2007 11:06 AM
Retrieving info from Url
Posted: Tue Oct 27, 2009 11:47 AM

Hello,
I have an url that return an XML file .

How to retrieve the context of the XML file directly without the action of the user .
How to bypass the dialog box asking to display or save the file .
Thanks for your help .

Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: Retrieving info from Url
Posted: Tue Oct 27, 2009 01:17 PM

You should look the thread

viewtopic.php?f=3t=11915hilit=wfSaveURL

&&

Regards,



Hakan ONEMLI



Harbour & MSVC 2022 & FWH 23.06
Posts: 1387
Joined: Fri May 23, 2008 01:33 PM
Re: Retrieving info from Url
Posted: Tue Oct 27, 2009 05:43 PM
Hi,

This is the working example...

Code (fw): Select all Collapse
#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: 300
Joined: Wed Jul 11, 2007 11:06 AM
Re: Retrieving info from Url
Posted: Wed Oct 28, 2009 08:56 PM

Thanks for this help .

Continue the discussion