でも 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