Code:
' 'NOTE: Why a repost? Because I wasted thirty minutes until I noticed that 'the TIMEOUT setting of the TCP connection was overriding the 60 second default 'with 30 milliseconds, which was obviously far too short for even most fiber- 'optic network scenarios. ALSO I added ERR checking. ' '============================================================================== ' ' WEBGET v1.3 - Grab a file from a web site ' Copyright (c) 1999-2001 PowerBASIC, Inc. All Rights Reserved. ' '============================================================================== %port = 80 FUNCTION PBMAIN() AS LONG LOCAL buffer AS STRING LOCAL site AS STRING LOCAL file AS STRING LOCAL save AS STRING LOCAL temp AS STRING STDOUT "Webget v1.2 - Grab a file from a web site" STDOUT "Copyright (c) 1999-2001 PowerBASIC, Inc. All Rights Reserved." STDOUT "" IF LEN(COMMAND$) = 0 OR COMMAND$ = "/?" THEN STDOUT "Usage: webget url/file" STDOUT "" STDOUT " Ex: webget <A HREF="http://www.powerbasic.com/index.html"" TARGET=_blank>http://www.powerbasic.com/index.html"</A> EXIT FUNCTION END IF site = EXTRACT$(LTRIM$(LCASE$(COMMAND$),"http://"), "/") IF LEN(site) = 0 THEN STDOUT "Error! You must specify a web site." EXIT FUNCTION END IF file = TRIM$(MID$(COMMAND$, INSTR(LCASE$(COMMAND$), site) + LEN(site))) IF LEN(file) = 0 THEN STDOUT "Error! You must specify a file" EXIT FUNCTION END IF save = MID$(file, INSTR(-1, file, "/") + 1) IF LEN(save) = 0 THEN save = EXTRACT$(LTRIM$(site, "www."), ".") + ".html" END IF STDOUT "Connecting to " & site & " ..."; TCP OPEN PORT %port AT site AS #1 TIMEOUT 300000 IF ERR OR ERRAPI THEN STDOUT "" STDOUT "Could not connect to " & site STDOUT "ERR:" & TRIM$(STR$(ERR)) & " ERRAPI:" & TRIM$(STR$(ERRAPI)) EXIT FUNCTION ELSE STDOUT " OK!" STDOUT "" END IF STDOUT "Retrieving " & site & file & " to " & save & " "; TCP PRINT #1, "GET " & file & " HTTP/1.1" TCP PRINT #1, "Accept: */*" TCP PRINT #1, "Accept-Language: en-us" TCP PRINT #1, "Host: " & site TCP PRINT #1, "Pragma: no-cache" TCP PRINT #1, "Referer: <A HREF="http://www.google.com"" TARGET=_blank>http://www.google.com"</A> TCP PRINT #1, "UserAgent: webget 1.3 (www.powerbasic.com)" TCP PRINT #1, "" DO TCP RECV #1, 4096, buffer temp = temp & buffer STDOUT "."; ' 'Don't check EOF() in here because brief pauses in file download 'will leave an empty buffer and set EOF() until you next check 'and the buffer is full - at which point EOF() will be unset... ' 'From TCP RECV PB Help: If count& bytes are not available, Buffer$ 'will receive whatever bytes are available and EOF(fNum&) will 'return TRUE (non-zero). ' 'IF EOF(1) THEN STDOUT "": EXIT DO ' IF LEN(buffer) = 0 THEN STDOUT "": EXIT DO IF ERR THEN STDOUT "": EXIT DO LOOP IF ERR THEN STDOUT "ERR Error... (" & TRIM$(STR$(ERR)) & ")" IF EOF(1) THEN STDOUT "End of file returned for TCP connection." IF LEN(buffer) = 0 THEN STDOUT "Empty download buffer." buffer = REMAIN$(temp, $CRLF & $CRLF) temp = EXTRACT$(temp, $CRLF & $CRLF) ' ** Display the header information STDOUT temp ' ** Write the data section to a file OPEN save FOR BINARY AS #2 SETEOF #2 PUT$ #2, buffer CLOSE #2 TCP CLOSE #1 END FUNCTION
[This message has been edited by Chad D. Wood (edited June 18, 2004).]
Comment