我试图谷歌寻找一个有效的例子。我尝试过KSOAP2和JCIFS示例,但没有成功。我尝试连接的Web服务是第三方(Microsoft Dynamics NAV),无法修改。它使用SOAP和SPNEGO或NTLM身份验证。我猜它已经是NTLMv2,但我不确定。 任何人都可以建议我下面的SOAP请求的完整代码吗?
$<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:item="urn:microsoft-dynamics-schemas/page/items">
$ <soapenv:Header/>
$ <soapenv:Body>
$ <item:ReadMultiple>
$ <!--1 or more repetitions:-->
$ <item:filter>
$ <item:Field>No</item:Field>
$ <item:Criteria>1000</item:Criteria>
$ </item:filter>
$ <item:setSize>500</item:setSize>
$ </item:ReadMultiple>
$ </soapenv:Body>
$</soapenv:Envelope>
我已经使用soapUI验证了此请求,但它运行正常。但是当我尝试使用KSOAP2和JCIFS运行它时,我收到一条错误消息&#34; Connection refused&#34;。 重要的是要注意我是Java和Android的初学者。
答案 0 :(得分:0)
我对NAV和SOAP的经验有限,但我在身份验证方面遇到了类似的问题。
我需要做的是实际运行请求两次。由于某种原因,第一个请求永远不会通过(可能作为握手的一部分?),但第二个请求将返回有效的响应。最好的调试工具是一个简单的HTTP代理(例如Burpsuite),它可以让我看到发送的确切内容(根据标题等)以及响应是什么。
其次,当我手动创建此SOAP请求时,我错过了NAV的SOAPAction标头。我不确定这是否是标准的,但我需要使用带有.NET Web服务连接的HTTP代理(通过SOAP与NAV交谈的官方方式)并发现它是如何交谈的。