Я «исправил» это, но я не понимаю, почему мое исправление работает, и это меня беспокоит. Приведенный ниже код предназначен для HTTP POST на удаленный сервер. У меня две строки закомментированы. С двумя закомментированными строками кажется, что он пишет в открытое HTTP-соединение, но на удаленном сервере ничего не получено. Ошибок и исключений нет. С двумя раскомментированными строками, запрашивающими HTTP-код ответа, данные, похоже, действительно отправлены. Почему? Первоначально я написал это без двух строк, предполагая, что сброс и закрытие соединения будут вести себя так же, как сброс и закрытие соединения с файлом: то, что находится в буфере, записывается. Но, похоже, это не так. Есть ли лучший способ очистить и отправить данные POST, чем то, что я делаю?
private void post()
throws IOException {
System.out.println("Posting xml to url " + postUrl);
byte[] postData = htmlOutput.getBytes();
URL post = new URL(postUrl);
HttpURLConnection conn = (HttpURLConnection) post.openConnection();
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setRequestProperty("Content-Length", Integer.toString(postData.length));
conn.setUseCaches(false);
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.write(postData);
wr.flush();
wr.close();
conn.disconnect();
// int responseCode = conn.getResponseCode();
// System.out.println("POST Response Code from server was " + responseCode);
System.out.println("Finished posting xml to url " + postUrl);
}
DataOutputStream
, когда все, что вы делаете, это вызываетеwrite(byte[])
? - person Andreas   schedule 11.04.2020charset
не является значением заголовка HTTP, это атрибутContent-Type
, т. е. он должен бытьContent-Type", "application/x-www-form-urlencoded; charset=utf-8"
, и тогда вам нужно убедиться, что байты на самом деле являются UTF- 8, указав это при вызовеhtmlOutput.getBytes()
какgetBytes(StandardCharsets.UTF_8)
. - person Andreas   schedule 11.04.2020getResponseCode()
) уже был дан ответ в другом вопросе, поэтому ваш вопрос закрыт как дубликат. Если у вас есть другой вопрос, например. об обработке ответа вам необходимо создать новый вопрос и предоставить всю необходимую информацию, например. пример ответа и то, что касается обработки этого ответа, который является проблемой для вас. - person Andreas   schedule 13.04.2020