HTTP-Tiny
view release on metacpan or search on metacpan
lib/HTTP/Tiny.pm view on Meta::CPAN
858859860861862863864865866867868869870871872873874875876877878
else
{
$request
->{headers}{
'content-type'
} ||=
"application/octet-stream"
;
$request
->{headers}{
'transfer-encoding'
} =
'chunked'
unless
exists
$request
->{headers}{
'content-length'
}
||
$request
->{headers}{
'transfer-encoding'
};
$request
->{cb} =
$args
->{content};
}
}
elsif
(
length
$args
->{content} ) {
my
$content
=
$args
->{content};
if
( $] ge
'5.008'
) {
utf8::downgrade(
$content
, 1)
or
die
(
qq/Wide character in request message body\n/
);
}
$request
->{headers}{
'content-type'
} ||=
"application/octet-stream"
;
$request
->{headers}{
'content-length'
} =
length
$content
unless
$request
->{headers}{
'content-length'
}
||
$request
->{headers}{
'transfer-encoding'
};
$request
->{cb} =
sub
{
substr
$content
, 0,
length
$content
,
''
};
}
$request
->{trailer_cb} =
$args
->{trailer_callback}
lib/HTTP/Tiny.pm view on Meta::CPAN
102510261027102810291030103110321033103410351036103710381039104010411042104310441045# URI escaping adapted from URI::Escape
# perl 5.6 ready UTF-8 encoding adapted from JSON::PP
my
%escapes
=
map
{
chr
(
$_
) =>
sprintf
(
"%%%02X"
,
$_
) } 0..255;
$escapes
{
' '
}=
"+"
;
my
$unsafe_char
=
qr/[^A-Za-z0-9\-\._~]/
;
sub
_uri_escape {
my
(
$self
,
$str
) =
@_
;
return
""
if
!
defined
$str
;
if
( $] ge
'5.008'
) {
utf8::encode(
$str
);
}
else
{
$str
=
pack
(
"U*"
,
unpack
(
"C*"
,
$str
))
# UTF-8 encode a byte string
$str
=
pack
(
"C*"
,
unpack
(
"C*"
,
$str
));
# clear UTF-8 flag
}
$str
=~ s/(
$unsafe_char
)/
$escapes
{$1}/g;
return
$str
;
}
lib/HTTP/Tiny.pm view on Meta::CPAN
118211831184118511861187118811891190119111921193119411951196119711981199120012011202
@_
== 1 ||
die
(
q/Usage: $handle->close()/
.
"\n"
);
my
(
$self
) =
@_
;
CORE::
close
(
$self
->{fh})
or
die
(
qq/Could not close socket: '$!'\n/
);
}
sub
write
{
@_
== 2 ||
die
(
q/Usage: $handle->write(buf)/
.
"\n"
);
my
(
$self
,
$buf
) =
@_
;
if
( $] ge
'5.008'
) {
utf8::downgrade(
$buf
, 1)
or
die
(
qq/Wide character in write()\n/
);
}
my
$len
=
length
$buf
;
my
$off
= 0;
local
$SIG
{PIPE} =
'IGNORE'
;
while
() {
lib/HTTP/Tiny.pm view on Meta::CPAN
14671468146914701471147214731474147514761477147814791480148114821483148414851486@_
== 2 ||
die
(
q/Usage: $handle->write_content_body(request)/
.
"\n"
);
my
(
$self
,
$request
) =
@_
;
my
(
$len
,
$content_length
) = (0,
$request
->{headers}{
'content-length'
});
while
() {
my
$data
=
$request
->{cb}->();
defined
$data
&&
length
$data
or
last
;
if
( $] ge
'5.008'
) {
utf8::downgrade(
$data
, 1)
or
die
(
qq/Wide character in write_content()\n/
);
}
$len
+=
$self
->
write
(
$data
);
}
$len
==
$content_length
or
die
(
qq/Content-Length mismatch (got: $len expected: $content_length)\n/
);
lib/HTTP/Tiny.pm view on Meta::CPAN
151415151516151715181519152015211522152315241525152615271528152915301531153215331534@_
== 2 ||
die
(
q/Usage: $handle->write_chunked_body(request)/
.
"\n"
);
my
(
$self
,
$request
) =
@_
;
my
$len
= 0;
while
() {
my
$data
=
$request
->{cb}->();
defined
$data
&&
length
$data
or
last
;
if
( $] ge
'5.008'
) {
utf8::downgrade(
$data
, 1)
or
die
(
qq/Wide character in write_chunked_body()\n/
);
}
$len
+=
length
$data
;
my
$chunk
=
sprintf
'%X'
,
length
$data
;
$chunk
.=
"\x0D\x0A"
;
$chunk
.=
$data
;
$chunk
.=
"\x0D\x0A"
;
( run in 1.029 second using v1.01-cache-2.11-cpan-55f5a4728d2 )