hpost: add -l flag to get location url after POST
This commit is contained in:
parent
909efb22c5
commit
7c3ea4360b
3 changed files with 72 additions and 35 deletions
|
@ -2,7 +2,7 @@
|
|||
rfork e
|
||||
argv0=$0
|
||||
fn usage {
|
||||
echo 'usage: '$"argv0' [ -o file ] [ -p body | -P ] [ -r header ] [ -m method ] [ -b baseurl ] url' >[1=2]
|
||||
echo usage: $argv0 '[ -l | -o file] [ -p body | -P ] [ -r header ] [ -m method ] [ -b baseurl ] url' >[1=2]
|
||||
exit usage
|
||||
}
|
||||
s=0
|
||||
|
@ -12,6 +12,7 @@ P=()
|
|||
r=()
|
||||
m=()
|
||||
b=()
|
||||
l=()
|
||||
while(~ $1 -*){
|
||||
switch($1){
|
||||
case -o
|
||||
|
@ -25,6 +26,8 @@ while(~ $1 -*){
|
|||
case -r
|
||||
r=($r $2)
|
||||
shift
|
||||
case -l
|
||||
l=1
|
||||
case -m
|
||||
m=$2
|
||||
shift
|
||||
|
@ -64,6 +67,10 @@ if(! ~ $s 0)
|
|||
}
|
||||
}
|
||||
<$d/body {
|
||||
if(~ $#l 1){
|
||||
echo `{cat $d/parsed/url}
|
||||
exit
|
||||
}
|
||||
if(~ $#o 1){
|
||||
l=`{cat $d/contentlength >[2]/dev/null}
|
||||
x=`{awk 'BEGIN{FS=" |-"}/^bytes ([0-9]+)\-/{print $2}' \
|
||||
|
|
37
rc/bin/hpost
37
rc/bin/hpost
|
@ -4,24 +4,36 @@ argv0=$0
|
|||
url=()
|
||||
at=() # text fields
|
||||
af=() # file fields
|
||||
l=()
|
||||
|
||||
fn usage {
|
||||
echo $argv0 '[ -u ] url [ -[gpm] action ] [ field:value | field@file ... ]' >[1=2]
|
||||
echo usage: $argv0 '[ -l ] [ -[gpm] action ] [ -u ] url [ field:value | field@file ... ]' >[1=2]
|
||||
exit usage
|
||||
}
|
||||
|
||||
while(~ $1 -*){
|
||||
switch($1){
|
||||
case -l; l=($l $1)
|
||||
case -u; shift; url=$1
|
||||
case -g; shift; action=$1; method=mget
|
||||
case -p; shift; action=$1; method=mpost
|
||||
case -m; shift; action=$1; method=multi
|
||||
case *; usage
|
||||
}
|
||||
shift
|
||||
}
|
||||
|
||||
# tired of typing -u
|
||||
if(~ $1 http://* https://*){
|
||||
url=$1
|
||||
shift
|
||||
}
|
||||
|
||||
if(~ $#url 0)
|
||||
usage
|
||||
|
||||
while(! ~ $#* 0){
|
||||
switch($1){
|
||||
case -u; shift; url=$1
|
||||
case -g; shift; action=$1; method=mget
|
||||
case -p; shift; action=$1; method=mpost
|
||||
case -m; shift; action=$1; method=multi
|
||||
case *:*@*; at=($1 $at)
|
||||
case *@*; af=($1 $af)
|
||||
case *:*; at=($1 $at)
|
||||
|
@ -30,8 +42,7 @@ while(! ~ $#* 0){
|
|||
shift
|
||||
}
|
||||
|
||||
if(~ $#url 0)
|
||||
usage
|
||||
hpost=($argv0 $l)
|
||||
|
||||
fn uenc {
|
||||
f=$1
|
||||
|
@ -74,17 +85,18 @@ fn menc {
|
|||
fn mget {
|
||||
a=`{uenc '?'}
|
||||
action=$"action$"a
|
||||
hget -b $url $action
|
||||
$hget -b $url $action
|
||||
}
|
||||
fn mpost {
|
||||
uenc | hget -b $url -P $action
|
||||
uenc | $hget -b $url -P $action
|
||||
}
|
||||
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)
|
||||
$method
|
||||
exit
|
||||
}
|
||||
|
@ -97,14 +109,13 @@ for(i in $at $af){
|
|||
n=(1 $n)
|
||||
}
|
||||
a$#n=''
|
||||
|
||||
hget $url | uhtml | 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
|
||||
# find attributes, mark with ATT name value
|
||||
s!([a-zA-Z][a-zA-Z0-9:_]*)=("[^"]*"?|''[^'']*''?|[ ]*[^> ]+)!\nATT \1 \2!g;
|
||||
' | awk -v 'argv0='$"argv0 -v 'url='$"url '
|
||||
' | awk -v 'hpost='$"hpost -v 'url='$"url '
|
||||
BEGIN{
|
||||
for(i=0; ENVIRON["a"i]!=""; i++){
|
||||
s=ENVIRON["a"i]
|
||||
|
@ -133,7 +144,7 @@ function uq(s){
|
|||
}
|
||||
function emitform(){
|
||||
if(action!=""){
|
||||
printf argv0
|
||||
printf hpost
|
||||
if(url!="") printf " -u %s", qw(url)
|
||||
if(method=="post"){
|
||||
if(enctype=="multipart/form-data")
|
||||
|
|
|
@ -4,6 +4,8 @@ hget, hpost \- retrieve, post to a web page corresponding to a url
|
|||
.SH SYNOPSIS
|
||||
.B hget
|
||||
[
|
||||
.B -l
|
||||
|
|
||||
.B -o
|
||||
.I file
|
||||
] [
|
||||
|
@ -25,10 +27,8 @@ hget, hpost \- retrieve, post to a web page corresponding to a url
|
|||
.PP
|
||||
.B hpost
|
||||
[
|
||||
.B -u
|
||||
]
|
||||
.I url
|
||||
[
|
||||
.B -l
|
||||
] [
|
||||
.B -g
|
||||
.I action
|
||||
] [
|
||||
|
@ -38,6 +38,10 @@ hget, hpost \- retrieve, post to a web page corresponding to a url
|
|||
.B -m
|
||||
.I action
|
||||
] [
|
||||
.B -u
|
||||
]
|
||||
.I url
|
||||
[
|
||||
.I name:value
|
||||
|
|
||||
.I name@file
|
||||
|
@ -48,8 +52,10 @@ hget, hpost \- retrieve, post to a web page corresponding to a url
|
|||
retrieves the web page specified by the URL
|
||||
.I url
|
||||
and writes it, absent the
|
||||
.B -l
|
||||
and
|
||||
.B -o
|
||||
option, to standard output.
|
||||
options, to standard output.
|
||||
.PP
|
||||
The
|
||||
.I url
|
||||
|
@ -77,6 +83,18 @@ argument as a string or alternatively with
|
|||
read from standard input.
|
||||
.PP
|
||||
The
|
||||
.B -l
|
||||
option causes
|
||||
.I hget
|
||||
and
|
||||
.I hpost
|
||||
to print the location URL from the transactoin response
|
||||
instead of retriving the the body data. This is usefull
|
||||
for HTTP POST transactions that redirect to a URL containing
|
||||
the prosted data so we wont refetch the data we just uploaded
|
||||
to the site.
|
||||
.PP
|
||||
The
|
||||
.B -o
|
||||
option is used to keep a local file in sync with a
|
||||
web page. If the web page has been modified later than the
|
||||
|
@ -112,17 +130,6 @@ flags, then
|
|||
is invoked to execute the transaction submitting the form data.
|
||||
.PP
|
||||
The
|
||||
.B -u
|
||||
flag sets the target URL to
|
||||
.I url.
|
||||
As the
|
||||
.I url
|
||||
parameter is always required, it can be optionally specified
|
||||
in the first argument without the
|
||||
.B -u
|
||||
flag.
|
||||
.PP
|
||||
The
|
||||
.B -g
|
||||
and
|
||||
.B -p
|
||||
|
@ -133,6 +140,18 @@ flag sets the form method to POST and its enctype to
|
|||
In all cases, the form action URL is set to
|
||||
.I action.
|
||||
.PP
|
||||
The
|
||||
.B -u
|
||||
flag sets the target URL to
|
||||
.I url.
|
||||
As the
|
||||
.I url
|
||||
parameter is always required, the
|
||||
.B -u
|
||||
flag can be omited when
|
||||
.I url
|
||||
follows directly after the last option if any.
|
||||
.PP
|
||||
The remaining arguments of the form
|
||||
.B name:value
|
||||
are interpreted as text form field names and values to be submitted. An
|
||||
|
@ -152,21 +171,21 @@ Retrieve the commands needed to submit a form, which may then be
|
|||
edited and sent.
|
||||
.IP
|
||||
.EX
|
||||
% hpost http://p.intma.in
|
||||
/bin/hpost -u http://p.intma.in -p paste.cgi text:
|
||||
% hpost -l http://p.intma.in
|
||||
/bin/hpost -l -u http://p.intma.in -p paste.cgi text:
|
||||
.EE
|
||||
.PP
|
||||
Manually specify fields to be sent to a given
|
||||
.I url.
|
||||
.IP
|
||||
.EX
|
||||
% hpost -u http://p.intma.in -p paste.cgi text:'test post'
|
||||
% hpost -l -u http://p.intma.in -p paste.cgi text:'test post'
|
||||
.EE
|
||||
.PP
|
||||
Upload a file.
|
||||
Upload a file, print the resulting URL
|
||||
.IP
|
||||
.EX
|
||||
% hpost http://i.intma.in file@/tmp/screen.png | rc >/dev/null
|
||||
% hpost -l http://i.intma.in file@/tmp/screen.png | rc
|
||||
.EE
|
||||
.SH SOURCE
|
||||
.B /rc/bin/hget
|
||||
|
|
Loading…
Reference in a new issue