79 lines
1.1 KiB
Bash
Executable file
79 lines
1.1 KiB
Bash
Executable file
#!/bin/rc
|
|
rfork e
|
|
argv0=$0
|
|
fn usage {
|
|
echo 'usage: '$"argv0' [ -o file ] [ -p body | -P ] [ -r header ] [ -m method ] [ -b baseurl ] url' >[1=2]
|
|
exit usage
|
|
}
|
|
s=0
|
|
o=()
|
|
p=()
|
|
P=()
|
|
r=()
|
|
m=()
|
|
b=()
|
|
while(~ $1 -*){
|
|
switch($1){
|
|
case -o
|
|
o=$2
|
|
shift
|
|
case -p
|
|
p=$2
|
|
shift
|
|
case -P
|
|
P=1
|
|
case -r
|
|
r=($r $2)
|
|
shift
|
|
case -m
|
|
m=$2
|
|
shift
|
|
case -b
|
|
b=$2
|
|
shift
|
|
case *
|
|
usage
|
|
}
|
|
shift
|
|
}
|
|
if(! ~ $#* 1)
|
|
usage
|
|
if(! ~ $#o 0){
|
|
if(! ~ $#o 1)
|
|
usage
|
|
if(test -s $o)
|
|
s=`{ls -l $o | awk '{print $6}'}
|
|
}
|
|
if(! ~ $s 0)
|
|
r=($r 'Range: bytes='^$s^'-')
|
|
<[3=0] <>/mnt/web/clone {
|
|
d=/mnt/web/^`{sed 1q}
|
|
if(~ $#b 1)
|
|
echo -n baseurl $b >[1=0]
|
|
echo -n url $1 >[1=0]
|
|
for(i in $r)
|
|
echo -n headers $i >[1=0]
|
|
if(~ $#m 1)
|
|
echo -n request $m >[1=0]
|
|
if(! ~ $#p 0 || ! ~ $#P 0){
|
|
>$d/postbody {
|
|
if(! ~ $#p 0)
|
|
echo -n $"p
|
|
if(! ~ $#P 0)
|
|
cat <[0=3]
|
|
}
|
|
}
|
|
<$d/body {
|
|
if(~ $#o 1){
|
|
l=`{cat $d/contentlength >[2]/dev/null}
|
|
x=`{awk 'BEGIN{FS=" |-"}/^bytes ([0-9]+)\-/{print $2}' \
|
|
$d/contentrange >[2]/dev/null}
|
|
if(~ $s $l && ~ $#x 0)
|
|
exit
|
|
if(~ $s $x)
|
|
exec cat >>$o
|
|
exec cat >$o
|
|
}
|
|
exec cat
|
|
}
|
|
}
|