我创建了一个基于 KSOAP-Android 和 JCIFS 的 NTLM 身份验证 SOAP 客户端。实现看起来像这样:
public class NtlmServiceConnection implements ServiceConnection
{
public NtlmServiceConnection(final SoapConnectionInfo connectionInfo, String path)
{
httpclient = new DefaultHttpClient();
httpclient.getAuthSchemes().register(AuthPolicy.NTLM, new NTLMSchemeFactory());
//...
@Override
public InputStream openInputStream() throws IOException {
ByteArrayEntity re = new ByteArrayEntity(bufferStream.toByteArray());
post.removeHeaders("CONTENT-LENGTH");
post.setEntity(re);
HttpResponse rep = httpclient.execute(post);
InputStream stream = rep.getEntity().getContent();
return stream;
}
//....
}
从表面上看,KSOAP 正在生成正确的消息,因为bufferStream
按预期填充了 SOAP 信封。 JCIFS 似乎正在完成其工作,而且我可以看到通过 Wireshark 进行的 NTLM 质询响应。问题是消息正文丢失。它根本就是空的。因此,Web 服务遇到 501 并且InputStream
返回的是空值。
任何人都知道为什么会发生这种情况?
注意:我删除了下面的 CONTENT-LENGTH 标头,因为setEntity
显然试图设置它,但 KSOAP 已经设置了它。我只是将其删除并允许setEntity
重置它。
我终于弄清楚了并在这里写了博客:http://csharpening.net/blog/?p=271 http://csharpening.net/blog/?p=271
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)