Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HEAD запрос в HttpURLConnection 
:(
    Опции темы
VoimiX
Дата 26.3.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



или я тупой или Java....

нужно оправить HEAD запрос к веб-ресурсу

чтоб просто запросить ресурс через GET делается так:

URL image_url = new URL("http://localhost/images/Slide.jpg");
HttpURLConnection http = (HttpURLConnection)image_url.openConnection();

Я так понял объект  HttpURLConnection можно получить только через вызов URL.openConnection()
да вот только какой метод указать нельзя...
конечно в HttpURLConnection есть метод setRequestMethod, но чтоб вызвать его HttpURLConnection нужно закрыть....

т.е. получается чтоб   оправить HEAD запрос нужно сделать так:

URL image_url = new URL("http://localhost/images/Slide.jpg");
HttpURLConnection http = (HttpURLConnection)image_url.openConnection();//здесь вызывается GET метод
http.disconnect();
http.setRequestMethod("HEAD");//вызываем НУЖНЫЙ НАМ МЕТОД
http.connect();

это же извращенство...

можно ли вызвать один метод HEAD???
а то получается , чтоб отправить HEAD по-любому придётся оправить GET
бред.....


PM MAIL   Вверх
AntonSaburov
Дата 26.3.2007, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 2
Всего: 118



Цитата(VoimiX @  26.3.2007,  10:49 Найти цитируемый пост)
конечно в HttpURLConnection есть метод setRequestMethod, но чтоб вызвать его HttpURLConnection нужно закрыть...

Это почему надо так делать ? Я честно говоря не работал с этим уже давно - но почему нельзя-то ?
PM MAIL WWW ICQ   Вверх
nagliyvred
Дата 2.4.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.10.2005

Репутация: нет
Всего: 3



С чего Вы взяли что при вызове url.openConnection() выполняется GET-запрос? HTTP это же прикладной протокол. Насколько я понимаю (гуру поправьте если неправ) вызов этого метода просто открывает сокет и создает соединение. А что вы в этот сокет потом запишите GET <url> HTTP\1.1 или HEAD <url> HTTP\1.0 или что-то еще -  на данном этапе ничем не определено. После того как сокет открыт делайте setRequestMethod("HEAD"); и все остальное - должно работать
PM   Вверх
kkorsakoff
Дата 3.4.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 14



url.openConnection()  по-умолчанию выполняет именно GET-запрос. Если указать setDoOutput() - то запрос будет POST. Вызов openConnection() то может и просто открывает сокет, но при первом же вызове getOutputStream() или getInputStream() он передает GET <url> HTTP\1.1 и всякие заголовки.

Так что нельзя писать туда что угодно, первую строку METHOD <url> HTTP/1.1 и заголовки UrlConnection делает сам.

Почему нельзя задать метод setRequestMethod()? Надо его вызвать не на закрытом запросе, а на НЕ открытом.

Смотрим исходники

Код

    public void setRequestMethod(String method) throws ProtocolException {
    if (connected) {
        throw new ProtocolException("Can't reset method: already connected");
    }
    // This restriction will prevent people from using this class to 
    // experiment w/ new HTTP methods using java.  But it should 
    // be placed for security - the request String could be
    // arbitrarily long.

    for (int i = 0; i < methods.length; i++) {
        if (methods[i].equals(method)) {
        this.method = method;
        return;
        }
    }
    throw new ProtocolException("Invalid HTTP method: " + method);
    }


PM MAIL WWW ICQ   Вверх
nagliyvred
Дата 4.4.2007, 00:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.10.2005

Репутация: нет
Всего: 3



Цитата(kkorsakoff @ 3.4.2007,  10:28)
url.openConnection()  по-умолчанию выполняет именно GET-запрос. Если указать setDoOutput() - то запрос будет POST. Вызов openConnection() то может и просто открывает сокет, но при первом же вызове getOutputStream() или getInputStream() он передает GET <url> HTTP\1.1 и всякие заголовки.

Так что нельзя писать туда что угодно, первую строку METHOD <url> HTTP/1.1 и заголовки UrlConnection делает сам.

Почему нельзя задать метод setRequestMethod()? Надо его вызвать не на закрытом запросе, а на НЕ открытом.

То что по-умолчанию методом является GET это понятно и, наверно я неправильно выразился, но я не имел ввиду что нужно будет руками загонять в сокет строку запроса. Я хотел сказать что в зависимости от того что потом будет передано во всякие setRequestMethod()'ы,  setRequestProperty() и прочие -  такой запрос и будет сформирован, и на момент вызова URL.openConnection() все эти параметры еще никуда  не отправлены.
PM   Вверх
kkorsakoff
Дата 4.4.2007, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 14



Тогда надо использовать простые сокеты.

Ну или Apache HttpClient, где все делается легко и простоsmile
Хотя странно, что у автора не получилось и так?
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.1001 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.