summaryrefslogtreecommitdiff
path: root/ipl/progs/htget.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/progs/htget.icn')
-rw-r--r--ipl/progs/htget.icn83
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