我需要请求正文看起来像这样:
<env:Body>
<abc:request token="0" id="1" version="4">
<category domain_id="630643"/>
</abc>
</env:Body>
如何将附加属性添加到?
此外,如何将编码从 UTF-8 更改为 UTF-16?在文档中找不到这个。
client.request :abc, :request, :token => 0, :id => 1, :version => 4 do
soap.body = {
:category => "",
:attributes! => { :category => { "domain_id" => 630643 } }
}
end
Savon::Client#request
接受名称空间、要调用的 SOAP 操作的名称以及 SOAP 输入标记的可选属性哈希。
<abc:request version="4" id="1" token="0">
SOAP 主体标签的属性可以通过一个特殊的:attributes!
Hash 来设置。请注意,该domain_id
属性是一个字符串,因为哈希键符号(默认情况下)被转换为 lowerCamelCase。
<category domain_id="630643"></category>
另请注意,Gyoku没有创建自闭合标签。Savon 使用 Gyoku 将 Ruby 哈希转换为 XML,并且该库能够创建自闭合标签,但它似乎吞下了这些自定义属性(v0.4.2)。这是一个错误,应该在下一个版本中修复。
更多信息和示例可以在新文档中找到。
Savon 使用HTTPI执行 HTTP 请求,您可以HTTPI::Request
通过Savon::Client#http
. 通过设置自定义“Content-Type”标头应该可以将默认编码更改为 UTF-16。
client.http.headers["Content-Type"] = "text/xml;charset=UTF-16"
请注意,这不会更改 xml 处理指令的编码属性:
<?xml version="1.0" encoding="UTF-8"?>
Take a look at "Send UTF-16 encoded SOAP request with Ruby and Savon" for information about how to change the processing instruction.