Я пытаюсь загрузить файл с Java, используя PUT , сервер выполняет дайджест-проверку подлинности. Я хочу сохранить его стройным, поэтому я пытаюсь использовать HttpURLConnection.
public void putData(String path, byte [] data) throws IOException, MalformedURLException {
Authenticator.setDefault(new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(user,password.toCharArray());
}});
debug("Default authenticator set");
//Safeguard against double slashes
if (path.startsWith("/")) {
path = path.replaceFirst("/","");
}
debug(hostname + path);
URL url = new URL(hostname + path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
debug("HttpURLConnection acquired");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("PUT");
conn.setRequestProperty("Content-Length",String.valueOf(data.length));
conn.setRequestProperty("Content-type","application/binary");
conn.setFixedLengthStreamingMode(data.length);
conn.connect();
debug("Properties set");
OutputStream out = conn.getOutputStream();
debug("Outputstrem acquired");
out.write(data,0,data.length);
out.flush();
out.close();
debug("Data written, stream closed.");
}
По какой-то причине это безнадежно терпит неудачу: я вижу возвращение 401, и тогда это сделано. Если я отключаю авторизацию, тот же код работает. Загрузка файла с похожим кодом с использованием дайджест-аутентификации «просто работает». Есть идеи? Я действительно предпочел бы не начинать использовать еще столько библиотек, как htclient от Apache или около того (... сейчас 2010 год ... можно ожидать, что http-запросы с дайджестом authN будут работать в любой стандартной библиотеке).