#!/bin/rc
rfork e
url=()
+headers=()
+action=()
+method=()
at=() # text fields
af=() # file fields
l=()
fn usage {
- echo 'usage: hpost [ -l ] [ -[gpm] action ] [ -u ] url [ field:value | field@file ... ]' >[1=2]
+ echo 'usage: hpost [ -l ] [ -[gpm] action ] [ -r header ] [ -u ] url [ field:value | field@file ... ]' >[1=2]
exit usage
}
switch($1){
case -l; l=($l $1)
case -u; shift; url=$1
+ case -r; shift; headers=($headers -r $1)
case -g; shift; action=$1; method=mget
case -p; shift; action=$1; method=mpost
case -m; shift; action=$1; method=multi
f=$1
cr=`{echo x | tr x \015}
for(i in $at){
- k=`{sed 's!:.*$!!' /env/i}
+ k=`{sed 's!:.*$!!; q' /env/i}
echo '--'$"f$"cr
echo 'Content-Disposition: form-data; name="'$"k'"'$"cr
echo $"cr
i=$"i$"cr
- sed 's!^[^:]+:!!' /env/i
+ sed '1s!^[^:]+:!!' /env/i
}
for(i in $af){
- k=`{sed 's!@.*$!!' /env/i}
- v=`{sed 's!^[^@]+@!!' /env/i}
+ k=`{sed 's!@.*$!!; q' /env/i}
+ ifs='
+' v=`{sed 's!^[^@]+@!!' /env/i}
t=`{file -m $v}
n=`{basename $v}
echo '--'$"f$"cr
}
fn multi {
f='HJBOUNDARY'
- menc $"f | $hget -r 'Content-Type: multipart/form-data, boundary='$"f -b $url -P $action
+ menc $"f | $hget -r 'Content-Type: multipart/form-data; boundary='$"f -b $url -P $action
}
+
if(! ~ $action ''){
- hget=(hget $l)
+ hget=(hget $headers $l)
$method
exit
}
n=(1 $n)
}
a$#n=''
-hget $url | uhtml | sed '
+hget $url | uhtml | tr '>' '
+' | sed '
s!^(TAG|ATT)! \1!g; # escape our inline signaling
s!<[ ]*!\nTAG !g; # find starttags, mark with TAG name ...
s!>[^>"'']*$!!g; # remove garbage after the tag