KSoap-Android\JCIFS 发送空的 HTTP 帖子

Posted

技术标签:

【中文标题】KSoap-Android\\JCIFS 发送空的 HTTP 帖子【英文标题】:KSoap-Android\JCIFS sends empty HTTP postKSoap-Android\JCIFS 发送空的 HTTP 帖子 【发布时间】:2011-04-20 03:03:54 【问题描述】:

我创建了一个基于 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 似乎正在完成它的工作,我可以看到 NTLM 挑战响应通过 Wireshark 进行。问题是缺少消息正文。它只是空的。因此,Web 服务遇到 501 并且返回的 InputStream 为空。

有人知道为什么会发生这种情况吗?

注意:我正在删除下面的 CONTENT-LENGTH 标头,因为 setEntity 显然试图设置它,但 KSOAP 已经设置了它。我只是删除它并允许setEntity 重置它。

【问题讨论】:

【参考方案1】:

我终于想通了,并在这里写了一篇博客:http://csharpening.net/blog/?p=271

【讨论】:

这一切都很好,但一旦你成功验证,你如何保持验证,以便你可以重新使用 HttpTransportSE?换句话说,我可以进行身份​​验证并获取该响应的 SoapObjects,但是一旦我运行另一个使用 HttpTransportSE 的 AsyncTask,我就会收到“未找到身份验证挑战”。 您应该在评论中发布代码,而不是链接到您自己的博客。您来自博客的源链接不再有效,如果您将博客关闭,智慧将会丢失。可惜我需要这个。 自从我看到这个已经好几年了,最近我的博客真的很糟糕。居然找到了ZIPdl.dropboxusercontent.com/u/3771090/MobileTfsBuildMonitor.zip

以上是关于KSoap-Android\JCIFS 发送空的 HTTP 帖子的主要内容,如果未能解决你的问题,请参考以下文章

强制 phpmailer 发送正文为空的邮件

Swift POST 请求发送一个空的正文

Paypal IPN 协议:为啥示例中没有发送空的 HTTP 200 响应?

QWebChannel 向 JavaScript 发送空的 QVariant POD 结构

解决Jenkins发送测试报告中用例成功失败数量为空的问题

解决Jenkins发送测试报告中用例成功失败数量为空的问题