1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
use strict;
use warnings;
use Test::More;
use LWP::UserAgent ();
use HTTP::Request ();
plan tests => 18;
# Prevent environment from interfering with test:
delete $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME};
delete $ENV{HTTPS_CA_FILE};
delete $ENV{HTTPS_CA_DIR};
delete $ENV{PERL_LWP_SSL_CA_FILE};
delete $ENV{PERL_LWP_SSL_CA_PATH};
delete $ENV{PERL_LWP_ENV_PROXY};
# default_header 'Content-Type' should be honored in POST/PUT
# if the "Content => 'string'" form is used. Otherwise, x-www-form-urlencoded
# will be used
my $url = "http://www.example.com";
my $ua = LWP::UserAgent->new;
$ua->default_header('Content-Type' => 'application/json');
$ua->proxy(http => "loopback:");
$ua->agent("foo/0.1");
# These forms will all be x-www-form-urlencoded
subtest 'PATCH x-www-form-urlencoded' => sub {
plan tests => 4;
for my $arg (
[{cat => 'dog'}],
[[cat => 'dog']],
[Content => {cat => 'dog'},],
[Content => [cat => 'dog'],],
)
{
is($ua->patch($url, @$arg)->content, <<"EOT", "patch @$arg");
PATCH http://www.example.com
User-Agent: foo/0.1
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
cat=dog
EOT
}
};
# These forms will all be x-www-form-urlencoded
subtest 'PUT x-www-form-urlencoded' => sub {
plan tests => 4;
for my $arg (
[{cat => 'dog'}],
[[cat => 'dog']],
[Content => {cat => 'dog'},],
[Content => [cat => 'dog'],],
)
{
is($ua->put($url, @$arg)->content, <<"EOT", "put @$arg");
PUT http://www.example.com
User-Agent: foo/0.1
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
cat=dog
EOT
}
};
# These forms will all be x-www-form-urlencoded
subtest 'POST x-www-form-urlencoded' => sub {
plan tests => 4;
for my $arg (
[{cat => 'dog'}],
[[cat => 'dog']],
[Content => {cat => 'dog'},],
[Content => [cat => 'dog'],],
)
{
is($ua->post($url, @$arg)->content, <<"EOT", "post @$arg");
POST http://www.example.com
User-Agent: foo/0.1
Content-Length: 7
Content-Type: application/x-www-form-urlencoded
cat=dog
EOT
}
};
# These should all use the default
for my $call (qw(post put patch)) {
my $ucall = uc $call;
my $arg = [Content => '{"cat":"dog"}'];
is($ua->$call($url, @$arg)->content, <<"EOT", "$call @$arg");
$ucall http://www.example.com
User-Agent: foo/0.1
Content-Length: 13
Content-Type: application/json
{"cat":"dog"}
EOT
}
# Provided Content-Type overrides default
for my $call (qw(post put patch)) {
my $ucall = uc $call;
my $arg = ['Content-Type' => 'text/plain', Content => '{"cat":"dog"}'];
is($ua->$call($url, @$arg)->content,
<<"EOT", "$call @$arg with override CT");
$ucall http://www.example.com
User-Agent: foo/0.1
Content-Length: 13
Content-Type: text/plain
{"cat":"dog"}
EOT
}
# Any non-true content type means use default
for my $ct (0, "", undef) {
for my $call (qw(post put patch)) {
my $ucall = uc $call;
my $arg = ['Content-Type' => $ct, Content => '{"cat":"dog"}'];
my $desc = defined($ct) ? $ct : "<undef>";
my @desc_arg = map { defined $_ ? $_ : "<undef>" } @$arg;
is($ua->$call($url, @$arg)->content,
<<"EOT", "$call @desc_arg with false override CT '$desc' uses default");
$ucall http://www.example.com
User-Agent: foo/0.1
Content-Length: 13
Content-Type: application/json
{"cat":"dog"}
EOT
}
}
|