diff options
Diffstat (limited to 'ipl/progs/htget.icn')
-rw-r--r-- | ipl/progs/htget.icn | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/ipl/progs/htget.icn b/ipl/progs/htget.icn new file mode 100644 index 0000000..09746a0 --- /dev/null +++ b/ipl/progs/htget.icn @@ -0,0 +1,83 @@ +############################################################################ +# +# File: htget.icn +# +# Subject: Program to get Web file using HTTP protocol +# +# Author: Gregg M. Townsend +# +# Date: May 15, 2002 +# +############################################################################ +# +# This file is in the public domain. +# +############################################################################ +# +# Htget retrieves the raw text of a file from the world wide web using +# HTTP protocol. (Other protocols such as FTP are not supported.) +# +# usage: htget [-h | -b] URL +# +# The URL may be given with or without the "http://" prefix. +# +# If -h is given, a HEAD request is sent, requesting only information +# instead of the complete file. +# +# If -b is given, the header is stripped and the body is copied +# in binary mode. +# +############################################################################ +# +# Links: cfunc, options +# +############################################################################ +# +# Requires: UNIX, dynamic loading +# +############################################################################ + +link cfunc +link options + +procedure main(args) + local opts, req, url, host, port, path, f + + opts := options(args, "hb") + if \opts["h"] then + req := "HEAD" + else + req := "GET" + + url := \args[1] | stop("usage: ", &progname, " [-h] url") + + url ? { + ="http:" | ="HTTP:" # skip optional http: + tab(many('/')) # skip optional // + host := tab(upto(':/') | 0) + if *host = 0 then + host := "localhost" + if not (=":" & (port := integer(tab(upto('/'))))) then + port := 80 + if pos(0) then + path := "/" + else + path := tab(0) + } + + if not (f := tconnect(host, port)) then + stop ("cannot connect to ", host, ":", port) + + writes(f, req, " ", path, " HTTP/1.0\r\n") + writes(f, "Host: ", host, "\r\n") + writes(f, "\r\n") + flush(f) + seek(f, 1) + + if \opts["b"] then { + while *read(f) > 0 + while writes(reads(f, 32768)) + } + else + while write(read(f)) +end |