2010-05-19 1 views
12

Я пытаюсь прочитать заголовок авторизации для HTTP-запроса (потому что мне нужно что-то добавить к нему), но я всегда получаю null для значения заголовка. Другие заголовки работают нормально.getRequestProperty («Авторизация») всегда возвращает 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?

ответ

21

По-видимому, это функция безопасности. 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" 
    }; 
+1

Это объяснило бы это. А также почему тот же код отлично работает в Google App Engine (где они используют собственную реализацию HttpUrlConnection). – Thilo

0

Вы пытались использовать URLConnection.addRequestProperty()? Вот как я использую для добавления заголовков HTTP-запросов.

+0

же результат: другие заголовочных работы, авторизация остается нулевой – Thilo

+0

Вы пробовали что-то вроде 'request.addRequestProperty (» Авторизация "," Базовый "+ хешированный (" имя пользователя: пароль "));' где 'hashed' является хэшем Base64 строки? Посмотрите, возвращает ли ваш 'assertEquals' результат. –

+0

Я не использую Basic Auth. – Thilo

0

Я не доволен дополнительными зависимостями, но после suggestion to switch to Commons Http решена ближайшая проблема для меня.

Я все еще хотел бы знать, в чем проблема с моим исходным кодом.

Смежные вопросы