KSoap-Android \ JCIFS отправляет пустое сообщение HTTP - PullRequest
5 голосов
/ 02 октября 2010

Я создал SOAP-клиент для аутентификации NTLM на основе KSOAP-Android и JCIFS.Реализация выглядит примерно так:

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.Проблема в том, что тело сообщения отсутствует.Это просто ноль.Из-за этого веб-сервис встречает 501, а InputStream возвращает ноль.

Кто-нибудь знает, почему это произойдет?

Примечание: я удаляю заголовок CONTENT-LENGTH ниже, потому что setEntity, очевидно, пытается установить это, но KSOAP уже установил его.Я просто удаляю его и позволяю setEntity сбросить его.

1 Ответ

1 голос
/ 30 ноября 2010

Я наконец понял это и написал об этом здесь: http://csharpening.net/blog/?p=271

...