savon_with_adapter 2.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/.travis.yml +11 -0
- data/.yardopts +6 -0
- data/CHANGELOG.md +1042 -0
- data/CONTRIBUTING.md +46 -0
- data/Gemfile +18 -0
- data/LICENSE +20 -0
- data/README.md +81 -0
- data/Rakefile +14 -0
- data/donate.png +0 -0
- data/lib/savon.rb +27 -0
- data/lib/savon/block_interface.rb +26 -0
- data/lib/savon/builder.rb +166 -0
- data/lib/savon/client.rb +89 -0
- data/lib/savon/core_ext/string.rb +29 -0
- data/lib/savon/header.rb +70 -0
- data/lib/savon/http_error.rb +27 -0
- data/lib/savon/log_message.rb +48 -0
- data/lib/savon/message.rb +35 -0
- data/lib/savon/mock.rb +5 -0
- data/lib/savon/mock/expectation.rb +71 -0
- data/lib/savon/mock/spec_helper.rb +62 -0
- data/lib/savon/model.rb +80 -0
- data/lib/savon/operation.rb +127 -0
- data/lib/savon/options.rb +336 -0
- data/lib/savon/qualified_message.rb +49 -0
- data/lib/savon/request.rb +89 -0
- data/lib/savon/request_logger.rb +48 -0
- data/lib/savon/response.rb +112 -0
- data/lib/savon/soap_fault.rb +48 -0
- data/lib/savon/version.rb +3 -0
- data/savon.gemspec +52 -0
- data/spec/fixtures/gzip/message.gz +0 -0
- data/spec/fixtures/response/another_soap_fault.xml +14 -0
- data/spec/fixtures/response/authentication.xml +14 -0
- data/spec/fixtures/response/header.xml +13 -0
- data/spec/fixtures/response/list.xml +18 -0
- data/spec/fixtures/response/multi_ref.xml +39 -0
- data/spec/fixtures/response/soap_fault.xml +8 -0
- data/spec/fixtures/response/soap_fault12.xml +18 -0
- data/spec/fixtures/response/taxcloud.xml +1 -0
- data/spec/fixtures/ssl/client_cert.pem +16 -0
- data/spec/fixtures/ssl/client_encrypted_key.pem +30 -0
- data/spec/fixtures/ssl/client_encrypted_key_cert.pem +24 -0
- data/spec/fixtures/ssl/client_key.pem +15 -0
- data/spec/fixtures/wsdl/authentication.xml +63 -0
- data/spec/fixtures/wsdl/betfair.xml +2981 -0
- data/spec/fixtures/wsdl/edialog.xml +15416 -0
- data/spec/fixtures/wsdl/interhome.xml +2137 -0
- data/spec/fixtures/wsdl/lower_camel.xml +52 -0
- data/spec/fixtures/wsdl/multiple_namespaces.xml +92 -0
- data/spec/fixtures/wsdl/multiple_types.xml +60 -0
- data/spec/fixtures/wsdl/taxcloud.xml +934 -0
- data/spec/fixtures/wsdl/team_software.xml +1 -0
- data/spec/fixtures/wsdl/vies.xml +176 -0
- data/spec/fixtures/wsdl/wasmuth.xml +153 -0
- data/spec/integration/centra_spec.rb +72 -0
- data/spec/integration/email_example_spec.rb +32 -0
- data/spec/integration/random_quote_spec.rb +23 -0
- data/spec/integration/ratp_example_spec.rb +28 -0
- data/spec/integration/stockquote_example_spec.rb +28 -0
- data/spec/integration/support/application.rb +82 -0
- data/spec/integration/support/server.rb +84 -0
- data/spec/integration/temperature_example_spec.rb +46 -0
- data/spec/integration/zipcode_example_spec.rb +42 -0
- data/spec/savon/builder_spec.rb +86 -0
- data/spec/savon/client_spec.rb +198 -0
- data/spec/savon/core_ext/string_spec.rb +37 -0
- data/spec/savon/features/message_tag_spec.rb +61 -0
- data/spec/savon/http_error_spec.rb +49 -0
- data/spec/savon/log_message_spec.rb +33 -0
- data/spec/savon/message_spec.rb +40 -0
- data/spec/savon/mock_spec.rb +157 -0
- data/spec/savon/model_spec.rb +154 -0
- data/spec/savon/observers_spec.rb +92 -0
- data/spec/savon/operation_spec.rb +211 -0
- data/spec/savon/options_spec.rb +772 -0
- data/spec/savon/request_spec.rb +493 -0
- data/spec/savon/response_spec.rb +258 -0
- data/spec/savon/soap_fault_spec.rb +126 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/support/endpoint.rb +25 -0
- data/spec/support/fixture.rb +39 -0
- data/spec/support/integration.rb +9 -0
- data/spec/support/stdout.rb +25 -0
- metadata +310 -0
@@ -0,0 +1,336 @@
|
|
1
|
+
require "logger"
|
2
|
+
require "httpi"
|
3
|
+
|
4
|
+
module Savon
|
5
|
+
class Options
|
6
|
+
|
7
|
+
def initialize(options = {})
|
8
|
+
@options = {}
|
9
|
+
assign options
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :option_type
|
13
|
+
|
14
|
+
def [](option)
|
15
|
+
@options[option]
|
16
|
+
end
|
17
|
+
|
18
|
+
def []=(option, value)
|
19
|
+
value = [value].flatten
|
20
|
+
self.send(option, *value)
|
21
|
+
end
|
22
|
+
|
23
|
+
def include?(option)
|
24
|
+
@options.key? option
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def assign(options)
|
30
|
+
options.each do |option, value|
|
31
|
+
self.send(option, value)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def method_missing(option, _)
|
36
|
+
raise UnknownOptionError, "Unknown #{option_type} option: #{option.inspect}"
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
class GlobalOptions < Options
|
42
|
+
|
43
|
+
def initialize(options = {})
|
44
|
+
@option_type = :global
|
45
|
+
|
46
|
+
defaults = {
|
47
|
+
:encoding => "UTF-8",
|
48
|
+
:soap_version => 1,
|
49
|
+
:namespaces => {},
|
50
|
+
:logger => Logger.new($stdout),
|
51
|
+
:log => false,
|
52
|
+
:filters => [],
|
53
|
+
:pretty_print_xml => false,
|
54
|
+
:raise_errors => true,
|
55
|
+
:strip_namespaces => true,
|
56
|
+
:convert_response_tags_to => lambda { |tag| tag.snakecase.to_sym},
|
57
|
+
:multipart => false,
|
58
|
+
:adapter => nil,
|
59
|
+
}
|
60
|
+
|
61
|
+
options = defaults.merge(options)
|
62
|
+
|
63
|
+
# this option is a shortcut on the logger which needs to be set
|
64
|
+
# before it can be modified to set the option.
|
65
|
+
delayed_level = options.delete(:log_level)
|
66
|
+
|
67
|
+
super(options)
|
68
|
+
|
69
|
+
log_level(delayed_level) unless delayed_level.nil?
|
70
|
+
end
|
71
|
+
|
72
|
+
# Location of the local or remote WSDL document.
|
73
|
+
def wsdl(wsdl_address)
|
74
|
+
@options[:wsdl] = wsdl_address
|
75
|
+
end
|
76
|
+
|
77
|
+
# SOAP endpoint.
|
78
|
+
def endpoint(endpoint)
|
79
|
+
@options[:endpoint] = endpoint
|
80
|
+
end
|
81
|
+
|
82
|
+
# Target namespace.
|
83
|
+
def namespace(namespace)
|
84
|
+
@options[:namespace] = namespace
|
85
|
+
end
|
86
|
+
|
87
|
+
# The namespace identifer.
|
88
|
+
def namespace_identifier(identifier)
|
89
|
+
@options[:namespace_identifier] = identifier
|
90
|
+
end
|
91
|
+
|
92
|
+
# Namespaces for the SOAP envelope.
|
93
|
+
def namespaces(namespaces)
|
94
|
+
@options[:namespaces] = namespaces
|
95
|
+
end
|
96
|
+
|
97
|
+
# Proxy server to use for all requests.
|
98
|
+
def proxy(proxy)
|
99
|
+
@options[:proxy] = proxy
|
100
|
+
end
|
101
|
+
|
102
|
+
# A Hash of HTTP headers.
|
103
|
+
def headers(headers)
|
104
|
+
@options[:headers] = headers
|
105
|
+
end
|
106
|
+
|
107
|
+
# Open timeout in seconds.
|
108
|
+
def open_timeout(open_timeout)
|
109
|
+
@options[:open_timeout] = open_timeout
|
110
|
+
end
|
111
|
+
|
112
|
+
# Read timeout in seconds.
|
113
|
+
def read_timeout(read_timeout)
|
114
|
+
@options[:read_timeout] = read_timeout
|
115
|
+
end
|
116
|
+
|
117
|
+
# The encoding to use. Defaults to "UTF-8".
|
118
|
+
def encoding(encoding)
|
119
|
+
@options[:encoding] = encoding
|
120
|
+
end
|
121
|
+
|
122
|
+
# The global SOAP header. Expected to be a Hash or responding to #to_s.
|
123
|
+
def soap_header(header)
|
124
|
+
@options[:soap_header] = header
|
125
|
+
end
|
126
|
+
|
127
|
+
# Sets whether elements should be :qualified or unqualified.
|
128
|
+
# If you need to use this option, please open an issue and make
|
129
|
+
# sure to add your WSDL document for debugging.
|
130
|
+
def element_form_default(element_form_default)
|
131
|
+
@options[:element_form_default] = element_form_default
|
132
|
+
end
|
133
|
+
|
134
|
+
# Can be used to change the SOAP envelope namespace identifier.
|
135
|
+
# If you need to use this option, please open an issue and make
|
136
|
+
# sure to add your WSDL document for debugging.
|
137
|
+
def env_namespace(env_namespace)
|
138
|
+
@options[:env_namespace] = env_namespace
|
139
|
+
end
|
140
|
+
|
141
|
+
# Changes the SOAP version to 1 or 2.
|
142
|
+
def soap_version(soap_version)
|
143
|
+
@options[:soap_version] = soap_version
|
144
|
+
end
|
145
|
+
|
146
|
+
# Whether or not to raise SOAP fault and HTTP errors.
|
147
|
+
def raise_errors(raise_errors)
|
148
|
+
@options[:raise_errors] = raise_errors
|
149
|
+
end
|
150
|
+
|
151
|
+
# Whether or not to log.
|
152
|
+
def log(log)
|
153
|
+
HTTPI.log = log
|
154
|
+
@options[:log] = log
|
155
|
+
end
|
156
|
+
|
157
|
+
# The logger to use. Defaults to a Savon::Logger instance.
|
158
|
+
def logger(logger)
|
159
|
+
@options[:logger] = logger
|
160
|
+
end
|
161
|
+
|
162
|
+
# Changes the Logger's log level.
|
163
|
+
def log_level(level)
|
164
|
+
levels = { :debug => 0, :info => 1, :warn => 2, :error => 3, :fatal => 4 }
|
165
|
+
|
166
|
+
unless levels.include? level
|
167
|
+
raise ArgumentError, "Invalid log level: #{level.inspect}\n" \
|
168
|
+
"Expected one of: #{levels.keys.inspect}"
|
169
|
+
end
|
170
|
+
|
171
|
+
@options[:logger].level = levels[level]
|
172
|
+
end
|
173
|
+
|
174
|
+
# A list of XML tags to filter from logged SOAP messages.
|
175
|
+
def filters(*filters)
|
176
|
+
@options[:filters] = filters.flatten
|
177
|
+
end
|
178
|
+
|
179
|
+
# Whether to pretty print request and response XML log messages.
|
180
|
+
def pretty_print_xml(pretty_print_xml)
|
181
|
+
@options[:pretty_print_xml] = pretty_print_xml
|
182
|
+
end
|
183
|
+
|
184
|
+
# Specifies the SSL version to use.
|
185
|
+
def ssl_version(version)
|
186
|
+
@options[:ssl_version] = version
|
187
|
+
end
|
188
|
+
|
189
|
+
# Whether and how to to verify the connection.
|
190
|
+
def ssl_verify_mode(verify_mode)
|
191
|
+
@options[:ssl_verify_mode] = verify_mode
|
192
|
+
end
|
193
|
+
|
194
|
+
# Sets the cert key file to use.
|
195
|
+
def ssl_cert_key_file(file)
|
196
|
+
@options[:ssl_cert_key_file] = file
|
197
|
+
end
|
198
|
+
|
199
|
+
# Sets the cert key password to use.
|
200
|
+
def ssl_cert_key_password(password)
|
201
|
+
@options[:ssl_cert_key_password] = password
|
202
|
+
end
|
203
|
+
|
204
|
+
# Sets the cert file to use.
|
205
|
+
def ssl_cert_file(file)
|
206
|
+
@options[:ssl_cert_file] = file
|
207
|
+
end
|
208
|
+
|
209
|
+
# Sets the ca cert file to use.
|
210
|
+
def ssl_ca_cert_file(file)
|
211
|
+
@options[:ssl_ca_cert_file] = file
|
212
|
+
end
|
213
|
+
|
214
|
+
# HTTP basic auth credentials.
|
215
|
+
def basic_auth(*credentials)
|
216
|
+
@options[:basic_auth] = credentials.flatten
|
217
|
+
end
|
218
|
+
|
219
|
+
# HTTP digest auth credentials.
|
220
|
+
def digest_auth(*credentials)
|
221
|
+
@options[:digest_auth] = credentials.flatten
|
222
|
+
end
|
223
|
+
|
224
|
+
# NTLM auth credentials.
|
225
|
+
def ntlm(*credentials)
|
226
|
+
@options[:ntlm] = credentials.flatten
|
227
|
+
end
|
228
|
+
|
229
|
+
# WSSE auth credentials for Akami.
|
230
|
+
def wsse_auth(*credentials)
|
231
|
+
@options[:wsse_auth] = credentials.flatten
|
232
|
+
end
|
233
|
+
|
234
|
+
# Instruct Akami to enable wsu:Timestamp headers.
|
235
|
+
def wsse_timestamp(*timestamp)
|
236
|
+
@options[:wsse_timestamp] = timestamp.flatten
|
237
|
+
end
|
238
|
+
|
239
|
+
# Instruct Nori whether to strip namespaces from XML nodes.
|
240
|
+
def strip_namespaces(strip_namespaces)
|
241
|
+
@options[:strip_namespaces] = strip_namespaces
|
242
|
+
end
|
243
|
+
|
244
|
+
# Tell Gyoku how to convert Hash key Symbols to XML tags.
|
245
|
+
# Accepts one of :lower_camelcase, :camelcase, :upcase, or :none.
|
246
|
+
def convert_request_keys_to(converter)
|
247
|
+
@options[:convert_request_keys_to] = converter
|
248
|
+
end
|
249
|
+
|
250
|
+
# Tell Nori how to convert XML tags from the SOAP response into Hash keys.
|
251
|
+
# Accepts a lambda or a block which receives an XML tag and returns a Hash key.
|
252
|
+
# Defaults to convert tags to snakecase Symbols.
|
253
|
+
def convert_response_tags_to(converter = nil, &block)
|
254
|
+
@options[:convert_response_tags_to] = block || converter
|
255
|
+
end
|
256
|
+
|
257
|
+
# Instruct Savon to create a multipart response if available.
|
258
|
+
def multipart(multipart)
|
259
|
+
@options[:multipart] = multipart
|
260
|
+
end
|
261
|
+
|
262
|
+
# Instruct Savon what HTTPI adapter it should use instead of default
|
263
|
+
def adapter(adapter)
|
264
|
+
@options[:adapter] = adapter
|
265
|
+
end
|
266
|
+
end
|
267
|
+
|
268
|
+
class LocalOptions < Options
|
269
|
+
|
270
|
+
def initialize(options = {})
|
271
|
+
@option_type = :local
|
272
|
+
|
273
|
+
defaults = {
|
274
|
+
:advanced_typecasting => true,
|
275
|
+
:response_parser => :nokogiri,
|
276
|
+
:multipart => false
|
277
|
+
}
|
278
|
+
|
279
|
+
super defaults.merge(options)
|
280
|
+
end
|
281
|
+
|
282
|
+
# The local SOAP header. Expected to be a Hash or respond to #to_s.
|
283
|
+
# Will be merged with the global SOAP header if both are Hashes.
|
284
|
+
# Otherwise the local option will be prefered.
|
285
|
+
def soap_header(header)
|
286
|
+
@options[:soap_header] = header
|
287
|
+
end
|
288
|
+
|
289
|
+
# The SOAP message to send. Expected to be a Hash or a String.
|
290
|
+
def message(message)
|
291
|
+
@options[:message] = message
|
292
|
+
end
|
293
|
+
|
294
|
+
# SOAP message tag (formerly known as SOAP input tag). If it's not set, Savon retrieves the name from
|
295
|
+
# the WSDL document (if available). Otherwise, Gyoku converts the operation name into an XML element.
|
296
|
+
def message_tag(message_tag)
|
297
|
+
@options[:message_tag] = message_tag
|
298
|
+
end
|
299
|
+
|
300
|
+
# Attributes for the SOAP message tag.
|
301
|
+
def attributes(attributes)
|
302
|
+
@options[:attributes] = attributes
|
303
|
+
end
|
304
|
+
|
305
|
+
# Value of the SOAPAction HTTP header.
|
306
|
+
def soap_action(soap_action)
|
307
|
+
@options[:soap_action] = soap_action
|
308
|
+
end
|
309
|
+
|
310
|
+
# Cookies to be used for the next request.
|
311
|
+
def cookies(cookies)
|
312
|
+
@options[:cookies] = cookies
|
313
|
+
end
|
314
|
+
|
315
|
+
# The SOAP request XML to send. Expected to be a String.
|
316
|
+
def xml(xml)
|
317
|
+
@options[:xml] = xml
|
318
|
+
end
|
319
|
+
|
320
|
+
# Instruct Nori to use advanced typecasting.
|
321
|
+
def advanced_typecasting(advanced)
|
322
|
+
@options[:advanced_typecasting] = advanced
|
323
|
+
end
|
324
|
+
|
325
|
+
# Instruct Nori to use :rexml or :nokogiri to parse the response.
|
326
|
+
def response_parser(parser)
|
327
|
+
@options[:response_parser] = parser
|
328
|
+
end
|
329
|
+
|
330
|
+
# Instruct Savon to create a multipart response if available.
|
331
|
+
def multipart(multipart)
|
332
|
+
@options[:multipart] = multipart
|
333
|
+
end
|
334
|
+
|
335
|
+
end
|
336
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "gyoku"
|
2
|
+
|
3
|
+
module Savon
|
4
|
+
class QualifiedMessage
|
5
|
+
|
6
|
+
def initialize(types, used_namespaces, key_converter)
|
7
|
+
@types = types
|
8
|
+
@used_namespaces = used_namespaces
|
9
|
+
@key_converter = key_converter
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_hash(hash, path)
|
13
|
+
return unless hash
|
14
|
+
return hash.map { |value| to_hash(value, path) } if hash.kind_of?(Array)
|
15
|
+
return hash.to_s unless hash.kind_of? Hash
|
16
|
+
|
17
|
+
hash.inject({}) do |newhash, (key, value)|
|
18
|
+
if key == :order!
|
19
|
+
add_namespaces_to_values(value, path)
|
20
|
+
newhash.merge(key => value)
|
21
|
+
else
|
22
|
+
translated_key = Gyoku.xml_tag(key, :key_converter => @key_converter).to_s
|
23
|
+
newpath = path + [translated_key]
|
24
|
+
|
25
|
+
if @used_namespaces[newpath]
|
26
|
+
newhash.merge(
|
27
|
+
"#{@used_namespaces[newpath]}:#{translated_key}" =>
|
28
|
+
to_hash(value, @types[newpath] ? [@types[newpath]] : newpath)
|
29
|
+
)
|
30
|
+
else
|
31
|
+
newhash.merge(translated_key => value)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def add_namespaces_to_values(values, path)
|
40
|
+
values.collect! { |value|
|
41
|
+
camelcased_value = Gyoku.xml_tag(value, :key_converter => @key_converter)
|
42
|
+
namespace_path = path + [camelcased_value.to_s]
|
43
|
+
namespace = @used_namespaces[namespace_path]
|
44
|
+
"#{namespace.blank? ? '' : namespace + ":"}#{camelcased_value}"
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require "httpi"
|
2
|
+
|
3
|
+
module Savon
|
4
|
+
class HTTPRequest
|
5
|
+
|
6
|
+
def initialize(globals, http_request = nil)
|
7
|
+
@globals = globals
|
8
|
+
@http_request = http_request || HTTPI::Request.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def build
|
12
|
+
@http_request
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def configure_proxy
|
18
|
+
@http_request.proxy = @globals[:proxy] if @globals.include? :proxy
|
19
|
+
end
|
20
|
+
|
21
|
+
def configure_timeouts
|
22
|
+
@http_request.open_timeout = @globals[:open_timeout] if @globals.include? :open_timeout
|
23
|
+
@http_request.read_timeout = @globals[:read_timeout] if @globals.include? :read_timeout
|
24
|
+
end
|
25
|
+
|
26
|
+
def configure_ssl
|
27
|
+
@http_request.auth.ssl.ssl_version = @globals[:ssl_version] if @globals.include? :ssl_version
|
28
|
+
@http_request.auth.ssl.verify_mode = @globals[:ssl_verify_mode] if @globals.include? :ssl_verify_mode
|
29
|
+
|
30
|
+
@http_request.auth.ssl.cert_key_file = @globals[:ssl_cert_key_file] if @globals.include? :ssl_cert_key_file
|
31
|
+
@http_request.auth.ssl.cert_file = @globals[:ssl_cert_file] if @globals.include? :ssl_cert_file
|
32
|
+
@http_request.auth.ssl.ca_cert_file = @globals[:ssl_ca_cert_file] if @globals.include? :ssl_ca_cert_file
|
33
|
+
|
34
|
+
@http_request.auth.ssl.cert_key_password = @globals[:ssl_cert_key_password] if @globals.include? :ssl_cert_key_password
|
35
|
+
end
|
36
|
+
|
37
|
+
def configure_auth
|
38
|
+
@http_request.auth.basic(*@globals[:basic_auth]) if @globals.include? :basic_auth
|
39
|
+
@http_request.auth.digest(*@globals[:digest_auth]) if @globals.include? :digest_auth
|
40
|
+
@http_request.auth.ntlm(*@globals[:ntlm]) if @globals.include? :ntlm
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
class WSDLRequest < HTTPRequest
|
46
|
+
|
47
|
+
def build
|
48
|
+
configure_proxy
|
49
|
+
configure_timeouts
|
50
|
+
configure_ssl
|
51
|
+
configure_auth
|
52
|
+
|
53
|
+
@http_request
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
class SOAPRequest < HTTPRequest
|
59
|
+
|
60
|
+
CONTENT_TYPE = {
|
61
|
+
1 => "text/xml;charset=%s",
|
62
|
+
2 => "application/soap+xml;charset=%s"
|
63
|
+
}
|
64
|
+
|
65
|
+
def build(options = {})
|
66
|
+
configure_proxy
|
67
|
+
configure_cookies options[:cookies]
|
68
|
+
configure_timeouts
|
69
|
+
configure_headers options[:soap_action]
|
70
|
+
configure_ssl
|
71
|
+
configure_auth
|
72
|
+
|
73
|
+
@http_request
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def configure_cookies(cookies)
|
79
|
+
@http_request.set_cookies(cookies) if cookies
|
80
|
+
end
|
81
|
+
|
82
|
+
def configure_headers(soap_action)
|
83
|
+
@http_request.headers = @globals[:headers] if @globals.include? :headers
|
84
|
+
@http_request.headers["SOAPAction"] ||= %{"#{soap_action}"} if soap_action
|
85
|
+
@http_request.headers["Content-Type"] ||= CONTENT_TYPE[@globals[:soap_version]] % @globals[:encoding]
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|