' Cheapie http file snatcher for Rapid-Q (Windows) by William Yu
' Fixed a header problem, sorry about that, should work for all webpages now.
' Your program might hang (ie. block a few minutes) if it can't locate the
' http server.
$APPTYPE GUI
$TYPECHECK ON
$INCLUDE "RAPIDQ.INC"
DECLARE SUB ButtonClick
CONST PortNum = 80 '' Standard HTTP port.
DIM Socket AS QSOCKET
DIM Sock AS INTEGER
CREATE Form AS QForm
Width = 400
Height = 400
Center
Caption = "Cheapie http file snatcher"
CREATE URLLabel AS QLabel
Left = 8
Top = 12
Caption = "URL: "
END CREATE
CREATE Edit AS QEdit
Left = 45
Top = 8
Width = 230
Text = "http://www.yahoo.com/"
END CREATE
CREATE Button AS QButton
Left = 300
Top = 6
Caption = "&Get it!"
OnClick = ButtonClick
END CREATE
CREATE RichEdit AS QRichEdit
Top = 45
Width = Form.ClientWidth
Height = 307
PlainText = True
WordWrap = False
ScrollBars = ssBoth
END CREATE
CREATE StatusBar AS QStatusBar
AddPanels "",""
Panel(0).Width = 130
Panel(0).Caption = str$(StatusBar.Panel(0).Width)
END CREATE
ShowModal
END CREATE
SUB ButtonClick
DIM Text AS STRING
DIM Bytes AS LONG
DIM Server AS STRING, PathToFile AS STRING
DIM I AS INTEGER
PathToFile = ""
Server = Edit.Text - "http://" '' Take out http://
I = INSTR(Server, "/")
IF I THEN
PathToFile = MID$(Server, I, LEN(Server)+1-I)
Server = LEFT$(Server, I-1)
END IF
Sock = Socket.Connect(Server, PortNum)
IF Sock < 0 THEN
ShowMessage "Could not make connection"
EXIT SUB
END IF
StatusBar.Panel(1).Caption = "Getting "+PathToFile+" from "+Server
'-- Send request, end with a blank line.
Socket.WriteLine(Sock, "GET "+PathToFile+" HTTP/1.0")
'-- This line is optional...
Socket.WriteLine(Sock, "HOST "+Server+":"+STR$(PortNum))
Socket.WriteLine(Sock, "") '-- End request
Text = ""
Bytes = 0
'-- Might not actually retrieve the whole file...
DO
Text = Text + Socket.Read(Sock, 32000) '' 32000 bytes... whatever they give us
Bytes = Bytes + Socket.Transferred
StatusBar.Panel(0).Caption = "Bytes Read: " + STR$(Bytes)
LOOP UNTIL Socket.Transferred = 0
RichEdit.Clear
RichEdit.Text = Text
Socket.Close
END SUB