line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package WWW::OpenResty; |
2
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
8
|
use strict; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
41
|
|
4
|
1
|
|
|
1
|
|
7
|
use warnings; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
39
|
|
5
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
#use Smart::Comments; |
7
|
1
|
|
|
1
|
|
6
|
use Carp qw(croak); |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
63
|
|
8
|
1
|
|
|
1
|
|
1535
|
use Params::Util qw( _HASH0 ); |
|
1
|
|
|
|
|
4952
|
|
|
1
|
|
|
|
|
78
|
|
9
|
1
|
|
|
1
|
|
1762
|
use LWP::UserAgent; |
|
1
|
|
|
|
|
96511
|
|
|
1
|
|
|
|
|
36
|
|
10
|
1
|
|
|
1
|
|
12
|
use Data::Dumper; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
82
|
|
11
|
1
|
|
|
1
|
|
7
|
use Digest::MD5 qw(md5_hex); |
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
1063
|
|
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
our $VERSION = '0.09'; |
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
sub new { |
16
|
|
|
|
|
|
|
### @_ |
17
|
5
|
50
|
|
5
|
0
|
11560
|
my $class = ref $_[0] ? ref shift : shift; |
18
|
5
|
50
|
|
|
|
39
|
my $params = _HASH0(shift @_) or croak "Invalid params"; |
19
|
|
|
|
|
|
|
### $params |
20
|
5
|
50
|
|
|
|
28
|
my $server = delete $params->{server} or |
21
|
|
|
|
|
|
|
croak "No server specified."; |
22
|
5
|
50
|
|
|
|
45
|
if ($server !~ m{^\w+://}) { |
23
|
0
|
|
|
|
|
0
|
$server = "http://$server"; |
24
|
|
|
|
|
|
|
} |
25
|
5
|
|
|
|
|
18
|
my $ignore_dup_error = delete $params->{ignore_dup_error}; |
26
|
5
|
|
|
|
|
13
|
my $timer = delete $params->{timer}; |
27
|
5
|
|
|
|
|
10
|
my $retries = delete $params->{retries}; |
28
|
5
|
|
|
|
|
45
|
my $ua = LWP::UserAgent->new; |
29
|
5
|
|
|
|
|
7173
|
$ua->cookie_jar({ file => "cookies.txt" }); |
30
|
5
|
|
|
|
|
19059
|
bless { |
31
|
|
|
|
|
|
|
server => $server, |
32
|
|
|
|
|
|
|
ua => $ua, |
33
|
|
|
|
|
|
|
timer => $timer, |
34
|
|
|
|
|
|
|
retries => $retries, |
35
|
|
|
|
|
|
|
ignore_dup_error => $ignore_dup_error, |
36
|
|
|
|
|
|
|
}, $class; |
37
|
|
|
|
|
|
|
} |
38
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
sub content_type { |
40
|
0
|
|
|
0
|
0
|
0
|
$_[0]->{content_type} = $_[1]; |
41
|
|
|
|
|
|
|
} |
42
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
sub login { |
44
|
3
|
|
|
3
|
1
|
27
|
my ($self, $user, $password) = @_; |
45
|
3
|
50
|
|
|
|
12
|
if ($password) { |
46
|
0
|
|
|
|
|
0
|
$password = md5_hex($password); |
47
|
0
|
|
|
|
|
0
|
return $self->get("/=/login/$user/$password?_use_cookie=1"); |
48
|
|
|
|
|
|
|
} |
49
|
3
|
|
|
|
|
13
|
$self->{_user} = $user; |
50
|
|
|
|
|
|
|
} |
51
|
|
|
|
|
|
|
|
52
|
|
|
|
|
|
|
sub get { |
53
|
5
|
|
|
5
|
1
|
1009
|
my $self = shift; |
54
|
5
|
|
|
|
|
26
|
$self->request(undef, 'GET', @_); |
55
|
|
|
|
|
|
|
} |
56
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
sub post { |
58
|
0
|
|
|
0
|
1
|
0
|
my $self = shift; |
59
|
0
|
|
|
|
|
0
|
my $content = pop; |
60
|
0
|
|
|
|
|
0
|
$self->request($content, 'POST', @_); |
61
|
|
|
|
|
|
|
} |
62
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
sub put { |
64
|
0
|
|
|
0
|
1
|
0
|
my $self = shift; |
65
|
0
|
|
|
|
|
0
|
my $content = pop; |
66
|
0
|
|
|
|
|
0
|
$self->request($content, 'PUT', @_); |
67
|
|
|
|
|
|
|
} |
68
|
|
|
|
|
|
|
|
69
|
|
|
|
|
|
|
sub delete { |
70
|
0
|
|
|
0
|
1
|
0
|
my $self = shift; |
71
|
0
|
|
|
|
|
0
|
$self->request(undef, 'DELETE', @_); |
72
|
|
|
|
|
|
|
} |
73
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
sub request { |
75
|
5
|
|
|
5
|
0
|
11
|
my ($self, $content, $method, $url, $params) = @_; |
76
|
5
|
50
|
33
|
|
|
25
|
!defined $params or _HASH0($params) or |
77
|
|
|
|
|
|
|
croak "Params must be a hash: ", Dumper($params); |
78
|
5
|
50
|
|
|
|
16
|
!ref $url or croak "URL is of the wrong type: ", Dumper($url); |
79
|
5
|
|
50
|
|
|
23
|
$params ||= {}; |
80
|
5
|
100
|
|
|
|
40
|
if ($self->{_user}) { |
81
|
3
|
|
33
|
|
|
21
|
$params->{_user} ||= $self->{_user}; |
82
|
|
|
|
|
|
|
} |
83
|
5
|
|
|
|
|
9
|
my @params; |
84
|
5
|
|
|
|
|
28
|
while (my ($key, $val) = each %$params) { |
85
|
3
|
|
|
|
|
18
|
push @params, "$key=$val"; |
86
|
|
|
|
|
|
|
} |
87
|
5
|
100
|
|
|
|
32
|
if ($url =~ /\?$/) { |
|
|
100
|
|
|
|
|
|
88
|
1
|
|
|
|
|
3
|
$url .= join '&', @params; |
89
|
|
|
|
|
|
|
} elsif ($url =~ /\?/) { |
90
|
1
|
|
|
|
|
6
|
$url .= "&" . join '&', @params; |
91
|
|
|
|
|
|
|
} else { |
92
|
3
|
|
|
|
|
11
|
$url .= "?" . join '&', @params; |
93
|
|
|
|
|
|
|
} |
94
|
5
|
|
|
|
|
12
|
my $type = $self->{content_type}; |
95
|
5
|
|
50
|
|
|
24
|
$type ||= 'text/plain'; |
96
|
5
|
50
|
|
|
|
17
|
if ($url !~ /^http:\/\//) { |
97
|
5
|
|
|
|
|
14
|
$url = $self->{server} . $url; |
98
|
|
|
|
|
|
|
} |
99
|
5
|
|
|
|
|
48
|
my $req = HTTP::Request->new($method); |
100
|
5
|
|
|
|
|
305
|
$req->header('Content-Type' => $type); |
101
|
5
|
|
|
|
|
297
|
$req->header('Accept', '*/*'); |
102
|
5
|
|
|
|
|
206
|
$req->url($url); |
103
|
5
|
50
|
33
|
|
|
16333
|
if ($content) { |
|
|
50
|
|
|
|
|
|
104
|
0
|
0
|
0
|
|
|
0
|
if ($method eq 'GET' or $method eq 'HEAD') { |
105
|
0
|
|
|
|
|
0
|
croak "HTTP 1.0/1.1 $method request should not have content: $content"; |
106
|
|
|
|
|
|
|
} |
107
|
|
|
|
|
|
|
|
108
|
0
|
|
|
|
|
0
|
$req->content($content); |
109
|
|
|
|
|
|
|
} elsif ($method eq 'POST' or $method eq 'PUT') { |
110
|
0
|
|
|
|
|
0
|
$req->header('Content-Length' => 0); |
111
|
|
|
|
|
|
|
} |
112
|
5
|
|
|
|
|
13
|
my $timer = $self->{timer}; |
113
|
5
|
|
|
|
|
10
|
my $ua = $self->{ua}; |
114
|
5
|
50
|
|
|
|
18
|
$timer->start($method) if $timer; |
115
|
5
|
|
|
|
|
26
|
my $res = $ua->request($req); |
116
|
5
|
50
|
|
|
|
86393
|
$timer->stop($method) if $timer; |
117
|
5
|
|
|
|
|
36
|
return $res; |
118
|
|
|
|
|
|
|
} |
119
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
|
121
|
|
|
|
|
|
|
1; |
122
|
|
|
|
|
|
|
__END__ |