1

ruby と minitest および Net:HTTP を使用して Web サービスの機能をテストしようとしています。

このコード

class TestOne <  MiniTest::Unit::TestCase

load 'test/test_helper.rb'

    def test_one

        xml_to_transmit = "
<?xml version='1.0' encoding='UTF-8' ?>
<MyRequest version='1.0'>
    <Id>1</Id>
</MyRequest>"

        url = URI('http://example.com/api')
        resp, data = Net::HTTP.post_form(url,nil => xml_to_transmit)
    end
end

パラメータとしてサーバーに送信しようとしているxmlをエスケープします。エスケープせずに送信する方法はありますか?(サーバー側のコードを変更する可能性はありません。)

これは、サーバーによって受信されるパラメーターです。

=%0A%3C%3Fxml+version%3D%271.0%27+encoding%3D%27UTF-8%27+%3F%3E%0A%3CMyRequest+version%3D%271.0%27%3E%0A%09%3CId%3E1%3C%2FId%3E%0A%3C%2FMyRequest%3E

私のtest_helper.rbは非常に基本的です

require 'minitest/unit'
require 'minitest/autorun' 
require 'net/http'

なぜこれが起こっているのか、そしてそれについて私に何ができるのかについて誰か考えがありますか?

4

1 に答える 1

1

これはうまくいくはずです:

req = Net::HTTP::Post.new(url.path)
req.body = xml_to_transmit
req.content_type = "text/xml"

res = Net::HTTP.start(url.host, url.port) { |http|
  http.request(req)
}
于 2012-07-13T15:35:58.610 に答える