/* Search engine query program */ /* Load the RxSock and RexxUtil libraries */ rc = RxFuncAdd("SockLoadFuncs","RxSock","SockLoadFuncs") rc = SockLoadFuncs() Call RxFuncAdd 'SysLoadFuncs','RexxUtil','SysLoadFuncs' Call SysLoadFuncs crlf=d2c(13)||d2c(10) /* Carriage return - linefeed pair */ Site = "www.altavista.digital.com" Port=80 SiteCommand = "GET /cgi-bin/query?pg=q&what=web&kl=XX&q=" SearchString = '"OS/2 Supersite"' UserAgent = "User-Agent: OS/2 REXX Query Program 1.0" /* The name of our program */ Call CreateQuery /* Create the query */ Say Query Call SendQuery Say " " Say "All done." Exit /* Send the query to the remote web server */ SendQuery: Procedure Expose Query Site Port crlf Say "Resolving hostname:" Site rc = SockGetHostByName(Site,"host.!") If (rc = 0) Then Do Say "Could not resolve hostname:" Site "Is the network down?" Return End server = host.!addr; /* Open the socket */ Say "Opening socket..." socket = SockSocket("AF_INET","SOCK_STREAM",0) If (socket = -1) Then Do Say "Error creating socket:" errno Return End /* Connect the socket */ Say "Connecting to socket..." server.!family = "AF_INET" server.!port = port server.!addr = server rc = SockConnect(socket,"server.!") If (rc = -1) then Do Say "Error on connecting socket:" errno Call CloseSock Return End /* Send the data to the remote server */ Say "Sending data to remote server..." rc = SockSend(socket,Query) If (rc = -1) Then Do tmp="Error sending data to server:" errno Call CloseSock Return End /* Receive the result from the server */ Say "Receiving data from remote server..." File="results.htm" rc=SysFileDelete(File) rc = 1 Do while rc > 0 rc = SockRecv(socket, 'newdata', 1024) > 0 Call Charout File,newdata Call Charout ,"#" End Call Charout crlf If (rc = -1) then Do Say "Error receiving data from server:" errno Call CloseSock End Else Call CloseSock rc=Stream(File,"C","Close") Return CloseSock: /* Close the socket */ rc = SockSoClose(socket) If (rc = -1) Then Do Say "Error closing socket:" errno) End Return /* Create the query string to be sent to the web server */ CreateQuery: /* Only allow the routine to see the necessary variables */ Procedure Expose SiteCommand SearchString UserAgent Query crlf /* Create a list of the types of responses we can handle */ Accept = "Accept: text/plain"||crlf||"Accept: text/html"||crlf SearchStringEncoded = Encode(SearchString) Query = SiteCommand||SearchStringEncoded "HTTP/1.0"||crlf||Accept Query = Query || crlf Return /* Encoder routine for URLs */ Encode: Procedure Parse Arg AString OkayChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' NewString="" Do i = 1 to Length( AString) Test = SubStr( AString, i, 1) if Pos( Test, OkayChars) > 0 Then NewString = NewString || Test else Do If Test=" " Then NewString=NewString||"+" Else NewString = NewString || '%' || c2x( Test) end end Return NewString