Delphi SOAPUI中的错误请求
我正在尝试使用Delphi2010和Indy使用web服务。为了建立一个可用的SOAP流来与我的程序创建的SOAP流进行比较,我正在SOAPUI中进行测试。我使用的是web服务提供商提供的SOAP流,它也与WSDL文件中指定的SOAP流相匹配。我从服务中收到HTTP 400(错误请求)错误 从我在网上看到的情况来看,收到HTTP 400错误表明SOAP请求的格式不正确,web服务无法读取。我已经用XML测试了我的SOAP流,XML似乎格式良好。我想这可能意味着某些内容不符合其模式要求。我将首先检查密码的模式描述,以防密码不会以纯文本形式发送。我还应该检查什么来消除HTTP 400错误 以下是我的请求(减少用户名和密码),以备不时之需:Delphi SOAPUI中的错误请求,delphi,soap,delphi-2010,indy,Delphi,Soap,Delphi 2010,Indy,我正在尝试使用Delphi2010和Indy使用web服务。为了建立一个可用的SOAP流来与我的程序创建的SOAP流进行比较,我正在SOAPUI中进行测试。我使用的是web服务提供商提供的SOAP流,它也与WSDL文件中指定的SOAP流相匹配。我从服务中收到HTTP 400(错误请求)错误 从我在网上看到的情况来看,收到HTTP 400错误表明SOAP请求的格式不正确,web服务无法读取。我已经用XML测试了我的SOAP流,XML似乎格式良好。我想这可能意味着某些内容不符合其模式要求。我将首先检
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:xop="http://www.w3.org/2004/08/xop/include"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://wwww3.org/2001/XMLSchema-instance">
<soap:Header>
<wsa:Action>http://edd.ca.gov/SendTransmission</wsa:Action>
<wsa:MessageID>urn:uuid:5aa788dc-86e1-448b-b085-2d2743cf9f26</wsa:MessageID>
<wsa:ReplyTo>
<wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</wsa:Address>
</wsa:ReplyTo>
<wsa:To>http://fsettestversion.edd.ca.gov/fsetproxy/fsetservice.asmx</wsa:To>
<wsse:Security soap:mustUnderstand="1">
<wsse:UsernameToken wsu:Id="UsernameToken">
<wsse:Username>#USERNAME#</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">#PASSWORD#/wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">O5QWht1bslLCX6KnlEypAA==</wsse:Nonce>
<wsu:Created>2012-02-29T22:32:38.250Z</wsu:Created>
</wsse:UsernameToken>
<wsu:Timestamp wsu:Id="Timestamp-805a7373-335c-43b6-ba21-6596c4848dbf">
<wsu:Created>2012-02-22T15:41:42Z</wsu:Created>
<wsu:Expires>2012-02-22T15:46:42Z</wsu:Expires>
</wsu:Timestamp>
</wsse:Security>
</soap:Header>
<soap:Body>
<SendTransmission xmlns="http://edd.ca.gov/">
<SendTransmissionRequest xmlns="http://www.irs.gov/a2a/mef/MeFTransmitterServiceWse.xsd">
<TransmissionDataList>
<Count>1</Count>
<TransmissionData>
<TransmissionId>123456789</TransmissionId>
<ElectronicPostmark>2012-02-22T07:41:42.2502206-08:00</ElectronicPostmark>
</TransmissionData>
</TransmissionDataList>
</SendTransmissionRequest>
<fileBytes>
<xop:Include href="cid:1.634654933022658454@example.org"/>
</fileBytes>
</SendTransmission>
</soap:Body>
</soap:Envelope>
http://edd.ca.gov/SendTransmission
urn:uuid:5aa788dc-86e1-448b-b085-2d2743cf9f26
http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
http://fsettestversion.edd.ca.gov/fsetproxy/fsetservice.asmx
#用户名#
#密码#/wsse:PASSWORD>
O5QWht1bslLCX6KnlEypAA==
2012-02-29T22:32:38.250Z
2012-02-22T15:41:42Z
2012-02-22T15:46:42Z
1.
123456789
2012-02-22T07:41:42.2502206-08:00
可能还有其他原因,但目前我对wsse:UsernameToken表示怀疑。我在下载了文件,并于昨晚阅读了它。它是用相当简单的语言写的,我感觉我明白它在说什么,但它留给我的问题比我最初问的问题要小。本文档建议您可以使用以下格式的纯文本密码:
<S11:Envelope xmlns:S11="..." xmlns:wsse="...">
<S11:Header>
...
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>Zoe</wsse:Username>
<wsse:Password>IloveDogs</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
...
</S11:Header>
...
</S11:Envelope>
...
佐伊
我的录影带
...
...
或者您可以使用密码摘要。它定义了如下的密码摘要:
<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu= "...">
<S11:Header>
...
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>NNK</wsse:Username>
<wsse:Password Type="...#PasswordDigest">
weYI3nXd8LjMNVksCKFV8t3rgHh3Rw==
</wsse:Password>
<wsse:Nonce>WScqanjCEAC4mQoBE07sAQ==</wsse:Nonce>
<wsu:Created>2003-07-16T01:24:32Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
...
</S11:Header>
...
</S11:Envelope>
Password_Digest=Base64(SHA-1(nonce+created+Password))
根据参考资料,密码摘要的格式如下:
<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu= "...">
<S11:Header>
...
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>NNK</wsse:Username>
<wsse:Password Type="...#PasswordDigest">
weYI3nXd8LjMNVksCKFV8t3rgHh3Rw==
</wsse:Password>
<wsse:Nonce>WScqanjCEAC4mQoBE07sAQ==</wsse:Nonce>
<wsu:Created>2003-07-16T01:24:32Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
...
</S11:Header>
...
</S11:Envelope>
...
NNK
weYI3nXd8LjMNVksCKFV8t3rgHh3Rw==
WScqanjCEAC4mQoBE07sAQ==
2003-07-16T01:24:32Z
...
...
这不是web服务发布者提供的示例中使用的格式。引用中的纯文本版本不使用nonce。示例消息使用nonce,但调用纯文本密码。在我看来,使用无密码摘要的nonce并不会给消息增加任何安全性。如果对如何创建它没有一致意见,它可以是任意随机字符串。我没抓住重点吗
我知道这似乎是一项乏味的工作,但我希望通过在这里提供这项服务,我们或许可以为下一个接踵而来的人提供一些帮助。我也遇到了这个问题。web服务发布者(edd.ca.gov)回应说“该值是SOAP1.2标准所要求的”,但我发现对此没有有效的支持。看起来我们都在走同一条路(FSET),也许我们应该合作,一起工作,两个人比一个人好。我在示例代码中发现了许多错误,而且我也还没有让它正常工作 看来EDD随时可用的人员不会有多大帮助。我把这个项目放在一边一段时间,以便我可以专注于其他一些事情。我得回去了,但我还没有留出时间。我非常愿意共同努力。我不认为SO有私人信息功能,但如果你真的想合作,请再次发表评论,我们将找到一种离线交流的方式。如果这不“违反规则”,我可以发布我的电子邮件。事实上,我的电子邮件地址在我的个人资料中。我认为发布你的电子邮件地址的唯一问题是,它可能会导致你收到一堆垃圾邮件。我不认为不发布你的电子邮件地址不会导致收到大量垃圾邮件,但我该说谁呢?我查看了你的电子邮件,没有收到任何电子邮件,但我的个人资料确实显示了一封。我很快就要离开办公室回家了。我会在八点半回到办公室。