]> git.lizzy.rs Git - plan9front.git/blob - rc/bin/hget
play: set user-agent, otherwise server thinks we'r mozilla m(
[plan9front.git] / rc / bin / hget
1 #!/bin/rc
2 rfork e
3 argv0=$0
4 fn usage {
5         echo usage: $argv0 '[ -l | -o file] [ -p body | -P ] [ -r header ] [ -m method ] [ -b baseurl ] url' >[1=2]
6         exit usage
7 }
8 s=0
9 o=()
10 p=()
11 P=()
12 r=()
13 m=()
14 b=()
15 l=()
16 while(~ $1 -*){
17         switch($1){
18         case -o
19                 o=$2
20                 shift
21         case -p
22                 p=$2
23                 shift
24         case -P
25                 P=1
26         case -r
27                 r=($r $2)
28                 shift
29         case -l
30                 l=1
31         case -m
32                 m=$2
33                 shift
34         case -b
35                 b=$2
36                 shift
37         case *
38                 usage
39         }
40         shift
41 }
42 if(! ~ $#* 1)
43         usage
44 if(! ~ $#o 0){
45         if(! ~ $#o 1)
46                 usage
47         if(test -s $o)
48                 s=`{ls -l $o | awk '{print $6}'}
49 }
50 if(! ~ $s 0)
51         r=($r 'Range: bytes='^$s^'-')
52 <[3=0] <>/mnt/web/clone {
53         d=/mnt/web/^`{sed 1q}
54         if(~ $#b 1)
55                 echo -n baseurl $b >[1=0]
56         echo -n url $1 >[1=0]
57         for(i in $r)
58                 echo -n headers $i >[1=0]
59         if(~ $#m 1)
60                 echo -n request $m >[1=0]
61         if(! ~ $#p 0 || ! ~ $#P 0){
62                  >$d/postbody {
63                         if(! ~ $#p 0)
64                                 echo -n $"p
65                         if(! ~ $#P 0)
66                                 cat <[0=3]
67                 }
68         }
69         <$d/body {
70                 if(~ $#l 1){
71                         echo `{cat $d/parsed/url}
72                         exit
73                 }
74                 if(~ $#o 1){
75                         l=`{cat $d/contentlength >[2]/dev/null}
76                         x=`{awk 'BEGIN{FS=" |-"}/^bytes ([0-9]+)\-/{print $2}' \
77                                 $d/contentrange >[2]/dev/null}
78                         if(~ $s $l && ~ $#x 0)
79                                 exit
80                         if(~ $s $x)
81                                 exec cat >>$o
82                         exec cat >$o
83                 }
84                 c=`{cat $d/contentencoding >[2]/dev/null}
85                 switch($c){
86                 case *gzip*
87                         exec gunzip
88                 case *bzip2*
89                         exec bunzip2
90                 case *compress*
91                         exec uncompress
92                 }
93                 exec cat
94         }
95 }