Retrieving info from Url

Retrieving info from Url

Postby Jack » 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 .
Jack
 
Posts: 288
Joined: Wed Jul 11, 2007 11:06 am

Re: Retrieving info from Url

Postby Horizon » Tue Oct 27, 2009 1:17 pm

Regards,

Hakan ONEMLI

Harbour & MSVC 2022 & FWH 23.04
Horizon
 
Posts: 1322
Joined: Fri May 23, 2008 1:33 pm

Re: Retrieving info from Url

Postby Horizon » Tue Oct 27, 2009 5:43 pm

Hi,

This is the working example...

Code: Select all  Expand view

#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.04
Horizon
 
Posts: 1322
Joined: Fri May 23, 2008 1:33 pm

Re: Retrieving info from Url

Postby Jack » Wed Oct 28, 2009 8:56 pm

Thanks for this help .
Jack
 
Posts: 288
Joined: Wed Jul 11, 2007 11:06 am


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 95 guests