为什么HttpURLConnection在401响应后重试连接时不重新发送PUT内容?

时间:2011-03-24 08:31:08

标签: java android httpurlconnection

我在Android(API级别7)上使用HttpURLConnection时遇到了一些奇怪的问题。我正在使用基本身份验证,使用默认身份验证器进行设置,如下所示:

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请求,其Content-Length为0。

之前有没有人见过这个,我该如何解决?

谢谢, 肖恩

1 个答案:

答案 0 :(得分:1)

最终通过不使用Authenticator解决了这个问题,而是手动将基本授权标头添加到HttpURLConnection。