2010-10-02 49 views
4

我創建了基於KSOAP-Android和JCIFS的NTLM身份驗證SOAP客戶端。實施看起來是這樣的:KSoap-Android JCIFS發送空HTTP請求

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; 
    } 

    //.... 
} 

從它,因爲bufferStream與SOAP信封人口預期KSOAP正在生成正確的消息的樣子。 JCIFS似乎在做它的工作,我可以看到通過Wireshark發生的NTLM挑戰響應。問題是郵件正文缺失。它根本無效。由於此,Web服務遇到501而返回的InputStream爲空。

任何人都知道爲什麼會發生這種情況?

注意:我刪除了下面的CONTENT-LENGTH標題,因爲setEntity顯然試圖設置這個,但是KSOAP已經設置了它。我只是刪除它,並允許setEntity重置它。

回答

1

我終於想通了,在這裏的博客上講述它:http://csharpening.net/blog/?p=271

+0

這是所有罰款和花花公子,但一旦成功認證,你怎麼堅持的認證,所以你可以回去使用HttpTransportSE?換句話說,我可以進行身份​​驗證,並獲得該響應的SoapObjects,但只要我在運行使用HttpTransportSE其他的AsyncTask,我得到一個「沒有認證挑戰找到。」 – whyoz 2013-09-17 20:48:30

+0

您應該在評論中發佈代碼,而不是鏈接到您自己的博客。來自博客的源代碼鏈接不再起作用,如果您將博客放下,wisdome將會丟失。爲了不好,我需要這個。 – Warpzit 2014-10-17 13:37:57

+0

去過年以來我已經看了這一點,我在博客中已經真正的壞最近。其實找到了ZIP https://dl.dropboxusercontent.com/u/3771090/MobileTfsBuildMonitor.zip – 2014-10-31 03:02:46