class Veritrans::Tercerog::Mdk::MdkConnectionServlet
サーブレット接続クラス
Public Class Methods
new(use_default_conf = true)
click to toggle source
コンストラクタ¶ ↑
コンフィグファイルからデータを取得して当クラスを使用できる状態にする。 パラメータuse_default_confがFALSEの場合はデフォルト値を設定しない。
- @param
-
use_default_conf デフォルトのConfigファイルからデータを取得するかを指定するフラグ
# File tgMdk/lib/tg_mdk/mdk_connection_servlet.rb, line 28 def initialize(use_default_conf = true) # プロキシを使用するかを示すフラグ @use_proxy = false # プロキシのホスト @proxy_host = nil # プロキシのポート @proxy_port = nil # プロキシのユーザ @proxy_username = nil # プロキシのユーザのパスワード @proxy_password = nil # 接続タイムアウト @connection_timeout = 0 # 読み取りタイムアウト @read_timeout = 0 # 公開鍵ファイルパス @ca_cert_file = nil # SSLプロトコル @ssl_protocol = nil # コンフィグクラスのインスタンス設定 @config = Veritrans::Tercerog::Mdk::MdkConfig.instance # デフォルト値を設定 set_default_config if use_default_conf end
Public Instance Methods
execute(url_str, param)
click to toggle source
Servlet接続メソッド¶ ↑
- @param
-
url_str 接続先URL
- @param
-
param 送信するパラメータ
- @return
-
処理結果
# File tgMdk/lib/tg_mdk/mdk_connection_servlet.rb, line 92 def execute(url_str, param) # 接続先URLを解析 url = URI.parse(url_str) # HTTPインスタンスを生成 http = new_http_instance(url) header = { "Content-Type" => "application/json", "User-Agent" => @config.get_user_agent } # POST送信 rtn_str = "" http.start {|w| response = w.post(url.path, param, header) # 応答電文のHTTPステータスチェック http_result_checker(response.code) # 応答電文設定 rtn_str = response.body } unless rtn_str.nil? rtn_str.force_encoding(Veritrans::Tercerog::Mdk::MdkUtils::DFAULT_ENCODE) end return rtn_str rescue OpenSSL::SSL::SSLError => e raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MB03_SSLSOCKET_CREATION_FAILED rescue Timeout::Error => e raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MF03_SERVER_TIME_OUT rescue Net::HTTPServerException => e raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MF99_SYSTEM_INTERNAL_ERROR end
Private Instance Methods
http_result_checker(result_code)
click to toggle source
HTTPステータスを判断して例外を発生させ¶ ↑
- @param
-
result_code HTTPステータス
# File tgMdk/lib/tg_mdk/mdk_connection_servlet.rb, line 160 def http_result_checker(result_code) # nilチェック if result_code.nil? raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MF02_CANNOT_CONNECT_TO_GW end case result_code when "200" # 正常終了 以下、異常終了 when "500" raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MF05_INTERNAL_SERVER_ERROR when "502" raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MF06_BAD_GW when "503" raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MF07_SERVICE_UNAVAILABLE else raise Veritrans::Tercerog::Mdk::MdkError, Veritrans::Tercerog::Mdk::MdkMessage::MF02_CANNOT_CONNECT_TO_GW end end
new_http_instance(url)
click to toggle source
HTTPインスタンスを生成する。¶ ↑
- @param
-
url URLオブジェクト
- @return
-
HTTPインスタンス
# File tgMdk/lib/tg_mdk/mdk_connection_servlet.rb, line 134 def new_http_instance(url) if @use_proxy # Proxyを使用する場合 proxy_checker(url.host, url.port) http = Net::HTTP::Proxy(@proxy_host, @proxy_port, @proxy_username, @proxy_password) .new(url.host, url.port) else http = Net::HTTP.new(url.host, url.port) end http.use_ssl = true http.ca_file = @ca_cert_file http.ssl_version = @ssl_protocol http.verify_mode = OpenSSL::SSL::VERIFY_PEER http.open_timeout = @connection_timeout http.read_timeout = @read_timeout return http end
proxy_checker(host, port)
click to toggle source
PROXYサーバ接続確認¶ ↑
- @param
-
host 接続先HOST
- @param
-
port 接続先PORT
# File tgMdk/lib/tg_mdk/mdk_connection_servlet.rb, line 186 def proxy_checker(host, port) sock = nil Timeout::timeout(@connection_timeout) { sock = TCPSocket.open(@proxy_host, @proxy_port) } auth = [ [@proxy_username, @proxy_password].join(':') ].pack('m') req = [] req << "CONNECT #{host}:#{port} HTTP/1.0" req << "Host: #{host}:#{port}" req << "Proxy-Authorization: basic #{auth}" req << "" sock.write(req.join("\r\n")) sock_res = nil; Timeout::timeout(@read_timeout) { sock_res = sock.gets } sock.close res_code = sock_res.match(/^HTTP\/1\.. (\d+)/).to_a[1] if res_code != nil && res_code.size > 0 if res_code != "200" raise Veritrans::Tercerog::Mdk::MdkError.new(Veritrans::Tercerog::Mdk::MdkMessage::MF01_PROXY_ERROR, sock_res.chomp) end end end
set_default_config()
click to toggle source
当クラスをConfigファイルを使用して値を設定する¶ ↑
# File tgMdk/lib/tg_mdk/mdk_connection_servlet.rb, line 62 def set_default_config() # Proxy情報設定 if @config[:PROXY_SERVER_URL] and @config[:PROXY_SERVER_URL].strip.length > 0 proxy_url = URI.parse(@config[:PROXY_SERVER_URL]) @proxy_host = proxy_url.host @proxy_port = proxy_url.port @proxy_username = @config[:PROXY_USERNAME] @proxy_password = @config[:PROXY_PASSWORD] @use_proxy = true end # 接続タイムアウト設定 @connection_timeout = @config[:CONNECTION_TIMEOUT].to_f # 読み取りタイムアウト設定 @read_timeout = @config[:READ_TIMEOUT].to_f # 公開鍵ファイルパス設定 @ca_cert_file = @config[:CA_CERT_FILE] # SSLプロトコル @ssl_protocol = @config[:SSL_PROTOCOL] end