Опитвам се да кача файл с Java с помощта на PUT, сървърът прави Digest удостоверяване. Искам да го поддържам икономичен, затова се опитвам да използвам 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 заявки с digest authN да работят във всяка стандартна библиотека).