GetRequestProperty ( "Авторизация" ) всегда возвращает null
Я пытаюсь прочитать заголовок авторизации для HTTP-запроса (потому что мне нужно что-то добавить к нему), но я всегда получаю null для значения заголовка. Другие заголовки работают нормально.
public void testAuth() throws MalformedURLException, IOException{
URLConnection request = new URL("http://google.com").openConnection();
request.setRequestProperty("Authorization", "MyHeader");
request.setRequestProperty("Stackoverflow", "anotherHeader");
// works fine
assertEquals("anotherHeader", request.getRequestProperty("Stackoverflow"));
// Auth header returns null
assertEquals("MyHeader", request.getRequestProperty("Authorization"));
}
Я что-то делаю неправильно? Это функция безопасности? Есть ли способ сделать эту работу с URLConnection, или мне нужно использовать другую клиентскую библиотеку HTTP?
Ответы
Ответ 1
По-видимому, это функция безопасности. URLConnection на самом деле является экземпляром sun.net.www.protocol.http.HttpURLConnection. Он определяет getRequestProperty
как:
public String getRequestProperty (String key) {
// don't return headers containing security sensitive information
if (key != null) {
for (int i=0; i < EXCLUDE_HEADERS.length; i++) {
if (key.equalsIgnoreCase(EXCLUDE_HEADERS[i])) {
return null;
}
}
}
return requests.findValue(key);
}
Массив EXCLUDE_HEADERS
определяется как:
// the following http request headers should NOT have their values
// returned for security reasons.
private static final String[] EXCLUDE_HEADERS = {
"Proxy-Authorization",
"Authorization"
};
Ответ 2
Пробовали ли вы использовать URLConnection.addRequestProperty()
?
Вот как я использую для добавления заголовков HTTP-запросов.
Ответ 3
Я не доволен дополнительными зависимостями, но после предложения перейти на Commons Http решил для меня немедленную проблему.
Мне все же хотелось бы знать, в чем проблема с моим исходным кодом.