Могу ли я переопределить заголовок узла, где используется класс 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
Ответы
Ответ 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;
}
}