使用 Ruby 和 Savon 发送 UTF-16 编码的 SOAP 请求
如何将请求编码为 UTF-16?这是我所拥有的:
# Create Savon client
@client = Savon::Client.new do
wsdl.document = File.expand_path("account_list.wsdl", __FILE__)
end
# Set header encoding
@client.http.headers["Content-Type"] = "text/xml;charset=UTF-16"
# Setup ssl configuration
@client.http.auth.ssl.cert_key_file = "cert_key_file.pem"
@client.http.auth.ssl.cert_file = "cert_file.pem"
@client.http.auth.ssl.ca_cert_file = "ca_cert_file.pem"
@client.http.auth.ssl.verify_mode=:none
# Execute request
response = @client.request :account_list do
soap.body = {
:id => "18615618"
}
end
这是发送的内容,请注意编码=“UTF-8”:
Content-Type: text/xml;charset=UTF-16, SOAPAction: "accountList", Content-Length: 888 <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema
这是我得到的错误:
< s o a p : E n v e l o p e x m l n s : s o a p = " h t t p : / / s c h e m a s . x m l s o a p . o r g / s o a p / e n v e l o p e / " x m l n s : w s>d
< s o a p : B o d y >
< s o a p : F a u l t >
< f a u l t c o d e > s o a p : C l i e n t < / f a u l t c o d e >
< f a u l t s t r i n g > F a i l e d t o p r o c e s s S O A P r e q u e s t . S O A P b o d y n o t i n U T F - 1 6 .
< / f a u l t s t r i n g >
< d e t a i l >
< w s d l _ o p s : e r r o r > F a i l e d t o p r o c e s s S O A P r e q u e s t . S O A P b o d y n o t i n U T F - 1 6 .
< / w s d l _ o p s : e r r o r >
< / d e t a i l >
< / s o a p : F a u l t >
< / s o a p : B o d y >
< / s o a p : E n v e l o p e >
How do I encode the request in UTF-16? Here's what I have:
# Create Savon client
@client = Savon::Client.new do
wsdl.document = File.expand_path("account_list.wsdl", __FILE__)
end
# Set header encoding
@client.http.headers["Content-Type"] = "text/xml;charset=UTF-16"
# Setup ssl configuration
@client.http.auth.ssl.cert_key_file = "cert_key_file.pem"
@client.http.auth.ssl.cert_file = "cert_file.pem"
@client.http.auth.ssl.ca_cert_file = "ca_cert_file.pem"
@client.http.auth.ssl.verify_mode=:none
# Execute request
response = @client.request :account_list do
soap.body = {
:id => "18615618"
}
end
Here's the begging of what's sent, notice the encoding="UTF-8":
Content-Type: text/xml;charset=UTF-16, SOAPAction: "accountList", Content-Length: 888 <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema
Here's the error I get:
< s o a p : E n v e l o p e x m l n s : s o a p = " h t t p : / / s c h e m a s . x m l s o a p . o r g / s o a p / e n v e l o p e / " x m l n s : w s>d
< s o a p : B o d y >
< s o a p : F a u l t >
< f a u l t c o d e > s o a p : C l i e n t < / f a u l t c o d e >
< f a u l t s t r i n g > F a i l e d t o p r o c e s s S O A P r e q u e s t . S O A P b o d y n o t i n U T F - 1 6 .
< / f a u l t s t r i n g >
< d e t a i l >
< w s d l _ o p s : e r r o r > F a i l e d t o p r o c e s s S O A P r e q u e s t . S O A P b o d y n o t i n U T F - 1 6 .
< / w s d l _ o p s : e r r o r >
< / d e t a i l >
< / s o a p : F a u l t >
< / s o a p : B o d y >
< / s o a p : E n v e l o p e >
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Savon 目前仅支持 更改 XML 指令标签 通过集成的 Builder 方法:
不过,使用这种方法您会错过很多 XML 支持。没有 SOAP 信封,没有标头或正文:
我将使用您的票来提出尽快有更好的解决方案!
Savon currently only supports changing the XML directive tag via the integrated Builder-method:
You'll miss out a lot of XML-support by using this approach though. No SOAP envelope, no header or body:
I'll use your ticket to come up with a better solution asap!