Почему HttpURLConnection не пересылает содержимое PUT, когда он повторяет соединение после ответа 401? - PullRequest
0 голосов
/ 24 марта 2011

У меня странная проблема с HttpURLConnection на Android (уровень API 7). Я использую базовую аутентификацию, настроенную с использованием аутентификатора по умолчанию, например:

Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password.toCharArray());
    }
});

Я делаю стандартный запрос следующим образом:

public InputStream put(String type, String name, String xml){

    try{
        String urlString = this.getURLString(type,name);
        URL url = new URL(urlString);
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setDoOutput(true);
        urlConnection.setRequestMethod("PUT");
        OutputStreamWriter out = new OutputStreamWriter(
            urlConnection.getOutputStream());
        out.write(xml);
        out.close();
        urlConnection.getInputStream();
        urlConnection.disconnect();
        return null;

    }
    catch(Exception e){
        Log.e(TAG,e.getMessage());
        return urlConnection.getErrorStream();
    }
}

Трассировка пакета показывает, что контент отправляется с HTTP-запросом. Затем я получаю 401 Unauthorized от сервера, и повторно отправить ответ. На этот раз учетные данные отправляются, как я ожидал, но содержимое больше не отправляется. Теперь это пустой запрос PUT с длиной содержимого равной 0.

Кто-нибудь видел это раньше, и как мне это исправить?

Спасибо, Sean

1 Ответ

1 голос
/ 25 марта 2011

В конечном итоге решили эту проблему, не используя Authenticator и вместо этого вручную добавив заголовок Basic Authorization в HttpURLConnection.

...