Ruby で SOAP してみた。

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

にほんのひまじん について

フリーのサラリーマン
カテゴリー: 俺様のこと パーマリンク