line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package SOAP::WSDL::Transport::HTTP; |
2
|
2
|
|
|
2
|
|
13837
|
use strict; use warnings; |
|
2
|
|
|
2
|
|
2
|
|
|
2
|
|
|
|
|
52
|
|
|
2
|
|
|
|
|
6
|
|
|
2
|
|
|
|
|
2
|
|
|
2
|
|
|
|
|
44
|
|
3
|
2
|
|
|
2
|
|
6
|
use base qw(LWP::UserAgent); |
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
5951
|
|
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
our $VERSION = 3.003; |
6
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
# create methods normally inherited from SOAP::Client |
8
|
2
|
|
|
|
|
243
|
SUBFACTORY: { |
9
|
2
|
|
|
2
|
|
87871
|
no strict qw(refs); |
|
2
|
|
|
|
|
3
|
|
10
|
|
|
|
|
|
|
foreach my $method ( qw(code message status is_success) ) { |
11
|
|
|
|
|
|
|
*{ $method } = sub { |
12
|
23
|
|
|
23
|
|
131
|
my $self = shift; |
13
|
23
|
100
|
|
|
|
37
|
return $self->{ $method } if not @_; |
14
|
20
|
|
|
|
|
32
|
return $self->{ $method } = shift; |
15
|
|
|
|
|
|
|
}; |
16
|
|
|
|
|
|
|
} |
17
|
|
|
|
|
|
|
} |
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
sub _agent { |
20
|
3
|
|
|
3
|
|
190
|
return qq[SOAP::WSDL $VERSION]; |
21
|
|
|
|
|
|
|
} |
22
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
sub send_receive { |
24
|
4
|
|
|
4
|
0
|
12
|
my ($self, %parameters) = @_; |
25
|
4
|
|
|
|
|
8
|
my ($envelope, $soap_action, $endpoint, $encoding, $content_type) = |
26
|
|
|
|
|
|
|
@parameters{qw(envelope action endpoint encoding content_type)}; |
27
|
|
|
|
|
|
|
|
28
|
4
|
100
|
|
|
|
7
|
$encoding = defined($encoding) |
29
|
|
|
|
|
|
|
? lc($encoding) |
30
|
|
|
|
|
|
|
: 'utf-8'; |
31
|
|
|
|
|
|
|
|
32
|
4
|
100
|
|
|
|
24
|
$content_type = "text/xml; charset=$encoding" |
33
|
|
|
|
|
|
|
if not defined($content_type); |
34
|
|
|
|
|
|
|
# what's this all about? |
35
|
|
|
|
|
|
|
# unfortunately combination of LWP and Perl 5.6.1 and later has bug |
36
|
|
|
|
|
|
|
# in sending multibyte characters. LWP uses length() to calculate |
37
|
|
|
|
|
|
|
# content-length header and starting 5.6.1 length() calculates chars |
38
|
|
|
|
|
|
|
# instead of bytes. 'use bytes' in THIS file doesn't work, because |
39
|
|
|
|
|
|
|
# it's lexically scoped. Unfortunately, content-length we calculate |
40
|
|
|
|
|
|
|
# here doesn't work either, because LWP overwrites it with |
41
|
|
|
|
|
|
|
# content-length it calculates (which is wrong) AND uses length() |
42
|
|
|
|
|
|
|
# during syswrite/sysread, so we are in a bad shape anyway. |
43
|
|
|
|
|
|
|
# |
44
|
|
|
|
|
|
|
# what to do? we calculate proper content-length (using |
45
|
|
|
|
|
|
|
# bytelength() function from SOAP::Utils) and then drop utf8 mark |
46
|
|
|
|
|
|
|
# from string (doing pack with 'C0A*' modifier) if length and |
47
|
|
|
|
|
|
|
# bytelength are not the same |
48
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
# use bytes is lexically scoped |
50
|
2
|
|
|
2
|
|
481
|
my $bytelength = do { use bytes; length $envelope }; |
|
2
|
|
|
|
|
9
|
|
|
2
|
|
|
|
|
10
|
|
|
4
|
|
|
|
|
5
|
|
|
4
|
|
|
|
|
5
|
|
51
|
4
|
100
|
|
|
|
14
|
$envelope = pack('C0A*', $envelope) |
52
|
|
|
|
|
|
|
if length($envelope) != $bytelength; |
53
|
|
|
|
|
|
|
|
54
|
4
|
|
|
|
|
18
|
my $request = HTTP::Request->new( 'POST', |
55
|
|
|
|
|
|
|
$endpoint, |
56
|
|
|
|
|
|
|
[ 'Content-Type', "$content_type", |
57
|
|
|
|
|
|
|
'Content-Length', $bytelength, |
58
|
|
|
|
|
|
|
'SOAPAction', $soap_action, |
59
|
|
|
|
|
|
|
], |
60
|
|
|
|
|
|
|
$envelope ); |
61
|
|
|
|
|
|
|
|
62
|
4
|
|
|
|
|
393
|
my $response = $self->request( $request ); |
63
|
|
|
|
|
|
|
|
64
|
4
|
|
|
|
|
1098
|
$self->code( $response->code); |
65
|
4
|
|
|
|
|
8
|
$self->message( $response->message); |
66
|
4
|
|
|
|
|
7
|
$self->is_success($response->is_success); |
67
|
4
|
|
|
|
|
7
|
$self->status($response->status_line); |
68
|
|
|
|
|
|
|
|
69
|
4
|
|
|
|
|
11
|
return $response->content(); |
70
|
|
|
|
|
|
|
} |
71
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
1; |
73
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
=pod |
75
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
=head1 NAME |
77
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
SOAP::WSDL::Transport::HTTP - Fallback http(s) transport class |
79
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
=head1 DESCRIPTION |
81
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
Provides a thin transport class used by SOAP::WSDL::Transport when |
83
|
|
|
|
|
|
|
SOAP::Lite is not available. |
84
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
=head1 LICENSE AND COPYRIGHT |
86
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
Copyright (c) 2007 Martin Kutter. All rights reserved. |
88
|
|
|
|
|
|
|
|
89
|
|
|
|
|
|
|
This file is part of SOAP-WSDL. You may distribute/modify it under |
90
|
|
|
|
|
|
|
the same terms as perl itself |
91
|
|
|
|
|
|
|
|
92
|
|
|
|
|
|
|
=head1 AUTHOR |
93
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
Martin Kutter Emartin.kutter fen-net.deE |
95
|
|
|
|
|
|
|
|
96
|
|
|
|
|
|
|
=head1 REPOSITORY INFORMATION |
97
|
|
|
|
|
|
|
|
98
|
|
|
|
|
|
|
$Rev: 851 $ |
99
|
|
|
|
|
|
|
$LastChangedBy: kutterma $ |
100
|
|
|
|
|
|
|
$Id: HTTP.pm 851 2009-05-15 22:45:18Z kutterma $ |
101
|
|
|
|
|
|
|
$HeadURL: https://soap-wsdl.svn.sourceforge.net/svnroot/soap-wsdl/SOAP-WSDL/trunk/lib/SOAP/WSDL/Transport/HTTP.pm $ |
102
|
|
|
|
|
|
|
|
103
|
|
|
|
|
|
|
=cut |
104
|
|
|
|
|
|
|
|