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
|
# File 'lib/active_merchant/lib/posts_data.rb', line 24
def ssl_post(url, data, = {})
uri = URI.parse(url)
http = Net::HTTP.new(uri.host, uri.port)
http.open_timeout = OPEN_TIMEOUT
http.read_timeout = READ_TIMEOUT
http.use_ssl = true
if ssl_strict
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file = File.dirname(__FILE__) + '/../../certs/cacert.pem'
else
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
if @options && !@options[:pem].blank?
http.cert = OpenSSL::X509::Certificate.new(@options[:pem])
if pem_password
raise ArgumentError, "The private key requires a password" if @options[:pem_password].blank?
http.key = OpenSSL::PKey::RSA.new(@options[:pem], @options[:pem_password])
else
http.key = OpenSSL::PKey::RSA.new(@options[:pem])
end
end
retry_exceptions do
begin
http.post(uri.request_uri, data, ).body
rescue EOFError => e
raise ConnectionError, "The remote server dropped the connection"
rescue Errno::ECONNRESET => e
raise ConnectionError, "The remote server reset the connection"
rescue Errno::ECONNREFUSED => e
raise RetriableConnectionError, "The remote server refused the connection"
rescue Timeout::Error, Errno::ETIMEDOUT => e
raise ConnectionError, "The connection to the remote server timed out"
end
end
end
|