でも soap4r は使わなかった。
Ruby っぽいコードになったのかは良く分からないが、特に後悔はしてない。
#!/usr/bin/ruby require "net/http" require "uri" require "rexml/document" #### 設定 #### url = "http://example.com:8080/" timeout_sec = 600 #### 実装 #### uri = URI.parse(url) Net::HTTP.start(uri.host, uri.port){|http| #タイムアウト対策 http.read_timeout = timeout_sec #ヘッダー部 header = { "Content-Type" => 'text/xml;charset="utf-8"', "Connection" => "Keep-Alive", "SOAPAction" => "", } #ボディ部 body = <<EOS <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Header> <なんか書く /> </soap:Header> <soap:Body> <いろいろ書く /> </soap:Body> </soap:Envelope> EOS #送信 response = http.post(uri.path, body, header) } #取得 puts "response.body" puts response.body puts #取得(てきとう) hoge = response.body.scan(/<hoge>(.*)<\/hoge>/) puts "response.body.scan(/<hoge>(.*)<\/hoge>/)" puts hoge puts #取得(REXML=>CSV風) puts "REXML=>CSV風" xmldoc = REXML::Document.new(response.body) xmldoc.elements.each("Something/hoge") do |element| print elem.elements['foo'].text rescue print "" print "," print elem.elements['bar'].text rescue print "" print "\n" end