Подтвердить что ты не робот

Могу ли я переопределить заголовок узла, где используется класс Java HttpUrlConnection?

Я использую следующий код, чтобы открыть http-соединение в java:

 URL url = new URL("http://stackoverflow.com");
 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 conn.setDoOutput(true);
 conn.setRequestMethod("GET");
 conn.setRequestProperty("Host", "Test:8080");
 conn.getOutputStream();

Однако вызов conn.setRequestProperty( "Хост", "Тест: 8080" ) не имеет никакого эффекта, независимо от того, какой порядок я вызываю, а Host - reset на конечный сервер. Есть ли способ переопределить заголовок хоста без использования другой библиотеки?

TIA Matt

4b9b3361

Ответ 1

Это использовалось для работы в прошлом, но оно было отключено как часть исправления безопасности. Очевидно, без заметки в журнале изменений. Для этого на bugs.sun.com есть такие ошибки, как # 7022056.

Существует аналогичный вопрос для другого заголовка, где ответ больше посвящен деталям, поэтому я просто свяжу его, а не пишу сам.: -)

Единственными обходными решениями, по-видимому, являются установка sun.net.http.allowRestrictedHeaders в true или использование другой http-библиотеки, такой как уже упомянутые http-компоненты.

Ответ 2

Заголовок Host заполняется HttpURLConnection на основе URL-адреса. Вы не можете открыть foo.com с помощью Host=bar.com. Из RFC

Поле заголовка запроса хоста задает номер хоста и номера интернет-ресурса запрашиваемого ресурса, полученный из исходного URI, предоставленного пользователем или ресурсом ссылки (обычно URL-адрес HTTP).

Btw, вы также можете попробовать apache http components.

Ответ 3

Это проблема с тем, как volley обрабатывает HTTPUrlConnection и политику повтора.

Быстрое исправление заключается в расширении класса "HurlStack" и переопределении функции "createConnection", чтобы вернуть HTTPUrlConnection с ChunkStreamMode 0

public class CustomHurlStack extends HurlStack {


   public CustomHurlStack(){
       super();

   }

   @Override
   protected HttpURLConnection createConnection(URL url) throws IOException {
       HttpURLConnection connection = super.createConnection(url);
       connection.setChunkedStreamingMode(0);
       return connection;
   }

}