gpt4 book ai didi

ruby - Savon - SOAP - ruby - 400 错误请求

转载 作者:太空宇宙 更新时间:2023-11-03 16:54:06 28 4
gpt4 key购买 nike

我正在尝试使用 Savon 通过 Ruby 发出 SOAP 请求,但我收到来自服务器的 400 Bad Request 响应。

这是我要提出的请求(根据 soapUI):

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:apis="http://www.csisoftwareusa.com/ApiService">    
<soap:Header/>
<soap:Body>
<apis:AuthenticateConsumer>
<!--Optional:-->
<apis:consumerName>?</apis:consumerName>
<!--Optional:-->
<apis:consumerPassword>?</apis:consumerPassword>
</apis:AuthenticateConsumer>
</soap:Body>
</soap:Envelope>

这是我用 Ruby 发出的请求;它返回 400 Bad Request 错误:

<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<ins0:AuthenticateConsumer>
<ins0:consumerName>?</ins0:consumerName>
<ins0:consumerPassword>?</ins0:consumerPassword>
</ins0:AuthenticateConsumer>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Http Headers: SOAPAction: "http://www.csisoftwareusa.com/ApiService/AuthenticateConsumer", Content-Type: text/xml;charset=UTF-8, Content-Length: 504

这是我能够使用 Python 发出的请求。此请求成功:

<SOAP-ENV:Envelope>
<SOAP-ENV:Header/>
<ns0:Body>
<ns1:AuthenticateConsumer>
<ns1:consumerName>?</ns1:consumerName>
<ns1:consumerPassword>?</ns1:consumerPassword>
</ns1:AuthenticateConsumer>
</ns0:Body>
</SOAP-ENV:Envelope>
Http headers: {'SOAPAction': u'"http://www.csisoftwareusa.com/ApiService/AuthenticateConsumer"', 'Content-Type': 'text/xml; charset=utf-8'}

我需要将对此 API 的调用集成到 Rails 应用程序中,因此在 Python 中执行此操作不是有效的解决方案。

我想知道是否有人能看到我缺少的东西。是空<SOAP-ENV:Header />标记问题,如果是,我如何将其添加到 Savon 请求中?

谢谢,斯图尔特

最佳答案

在我的例子中,我有重复的命名空间,所以我得到了 400 Bad Request。

我的代码:

require 'savon'

namespaces = {
"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",
}

client = Savon.client(
...
:namespace => namespaces
}

我删除了 :namespace 选项,错误消失了。

我是如何发现错误的?

使用 build_request 而不是 call 并打印请求正文:

client.build_request(:search, message: {...})
puts request.body

我把请求正文粘贴到SoapUI中,然后一点一点修改,直到请求成功。

关于ruby - Savon - SOAP - ruby - 400 错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886445/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com