Получить заголовок из объекта HttpUrlConnection
Я хочу отправить запрос на сервлет и прочитать заголовки ответа. Поэтому я пытаюсь использовать это:
URL url = new URL(contextPath + "file_operations");
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("charset", "utf-8");
conn.setUseCaches(false);
conn.setConnectTimeout(1000 * 5);
conn.connect();
conn.getHeaderField("MyHeader")
.....
Но полученные заголовки всегда null
. Сервлет отлично работает (я пробовал работать с сервлетом, используя автономный HTTP-клиент)
Ответы
Ответ 1
Убедитесь, что вы получаете успешный ответ, прежде чем пытаться получить заголовки. Вот как вы можете проверить свой ответ:
int status = conn.getResponseCode();
if (status == HttpURLConnection.HTTP_OK) {
String header = conn.getHeaderField("MyHeader");
}
Также убедитесь, что ответ сервлета не является ответом на перенаправление, если будет перенаправлена вся информация о сеансе, включая заголовки, будут потеряны.
Ответ 2
Перед подключением (сразу после setRquestPropert, setDoOutput a.s.o):
for (Map.Entry<String, List<String>> entries : conn.getRequestProperties().entrySet()) {
String values = "";
for (String value : entries.getValue()) {
values += value + ",";
}
Log.d("Request", entries.getKey() + " - " + values );
}
Перед отключением (после чтения ответа a.s.o):
for (Map.Entry<String, List<String>> entries : conn.getHeaderFields().entrySet()) {
String values = "";
for (String value : entries.getValue()) {
values += value + ",";
}
Log.d("Response", entries.getKey() + " - " + values );
}