Получить заголовок из объекта 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 );
}