>
>Hi
>
>I've been playing with the sockets features in order to try and 
>implement some client side http. I've been doing this because 
>Metacard's built-in http support won't work with some URLs (something 
>to do with the way aliasing is set up on the server, I think).
>
>The script below is a crude first attempt at this. It simply loads 
>the data from the specified URL. (I've removed some stuff that was 
>specific to my situation.) So far, it seems to work, even with 
>previously unreachable URLs. Ideally, I'd like to be able to emulate 
>the built-in http features of Metacard, but using sockets. (I've also 
>had a go at the POST method, and it seems to work, but I need to make 
>a more general solution than what I've done so far.)
>
>The scripts may be useful to anyone else wanting to do the same 
>thing. More importantly, I'd appreciate any feedback from the sockets 
>gurus about whether I'm going in the right direction.
>
>Two questions foremost on my mind:
>
>In order to show progress of the download (progress bar or whatever), 
>is it necessary to do reads in short steps (as in the script below) 
>or is there another way?

That's the way but when you get data it comes in chunks anyway.
Use repeat only if you have to.
>
>How to handle http proxies? Is this just a question of opening the 
>socket to the proxy and carrying on as before, or is it, as I fear, 
>more torturous?

Yes, take a look at my ftp client (http://www.cloud9.net/~undo) which handles proxy, 
it should be the same.
It also shows you how I handled the progress bar and others.

>
>Any comments appreciated.
>
>Cheers
>Dave Cragg
>
>---------------------------------------------------------------
>local lcSocket, lcPath, lcData, lcHeader
>
>on httpLoad pURL
>   ## remove initial "http://" if present
>   if "http://" is char 1 to 7 of pURL then
>     delete char 1 to 7 of pURL
>   end if
>   put  offset("/",pURL) into tOff
>   if tOff = 0 then
>     put pURL into lcSocket
>     put "" into lcPath
>   else
>     put char 1 to (tOff - 1) of pURL into lcSocket
>     put char tOff to -1 of pURL into lcPath
>   end if
>
>   put  numToChar(13) & numToChar(10) into CRLF

CRLF is built in you don't need to do the above.

>
>   open socket  to lcSocket
> 
>   put "GET" && lcPath  &&  "HTTP/1.1" & CRLF  into tString
>   put "host:" & lcSocket & CRLF after tString
>   put CRLF after tString  ## blank line is necessary

Put an empty space between header item and value = host: host.com

> 
>   write tString to socket lcSocket
>   read from socket lcSocket until CRLF ##line 1
>   if word 2 of it = 200 then
>     read from socket lcSocket until  CRLF &  CRLF ##get the header
>     put it into lcHeader
>     get lineOffset("Content-Length", lcHeader)
>     if it <> 0 then
>       put  it into tLineNum
>       put word 2 line tLineNum of lcHeader into tLength
>       put 1024 into tStep
>     end if
>     put empty into lcData
>     put 0 into tCount
>     put tLength div tStep into tTimes
>    ## read in small steps in order to show a progress bar or other indication
>     repeat for tTimes
>       add 1 to tCount
>       read from socket  lcSocket for tStep
>       put it after lcData
>      ## handle progress bar updating here
>     end repeat
>     read from socket  lcSocket until empty ## catch last few dribbles
>     put it after lcData
>     close socket lcSocket
>     ## do something with lcData here (cache it, return it, or whatever)
>   else
>     ## crude error handling
>     put word 2 of it
>     close socket lcSocket
>   end if
>end httpLoad
>-------------------------------
>on socketError pSocket, pErr
>   ##crude error handling
>   put pSocket & ":" & pErr
>end socketError
>------------------------------
>on socketTimeout pSocket
>   ##crude error handling
>   put "Timed out"
>   close socket pSocket
>end socketTimeout
>------------------------------
>_____________________________________________
>The LACS Centre (Business English Training Resources)
>mailto:[EMAIL PROTECTED]
>http://www.lacscentre.co.uk
>_____________________________________________


Regards, Andu 
_______________________
[EMAIL PROTECTED]

Archives: http://www.mail-archive.com/metacard%40lists.best.com/
Info: http://www.xworlds.com/metacard/mailinglist.htm
Please send bug reports to <[EMAIL PROTECTED]>, not this list.

Reply via email to