![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
T_Serg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 14.10.2007 Репутация: нет Всего: нет |
Перед созданием POST запроса к серверу необходимо прочитать контент странички. Это необходимо для того, чтобы узнать поле name тегов, которые нужно послать с пост запросом (при каждом обращении к страничке генерируется новое значение поля name необходимого тега)
Я пытаюсь cделать так:
В результате получаю java.net.ProtocolException: Cannot write output after reading input. at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source) Возможно ли в одном соединении URLConnection делать и get и post запросы? |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
нет
|
|||
|
||||
T_Serg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 14.10.2007 Репутация: нет Всего: нет |
а другими способами это возможно реализовать? например апачевским HTTPClient?
|
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
URLConnection по возможности использует одно физическое соединение при повторных обращениях к одному хосту (если не применять disconnect() после каждого запроса), хотя обьект URLConnection надо каждый раз создавать новый. Это, наверное, вводит в заблуждение. Применять HttpClient нет необходимости.
Это сообщение отредактировал(а) COVD - 7.8.2009, 11:57 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Откуда такая информация? И где храниться это соединение, между созданиями URLConnection? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
COVD |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
LSD, спасибо. Моя ошибка :( . Для повторных запросов используется тот же обьект HttpURLConnection.
PS. Тут действительно как-то непонятно. Для каждого нового запроса создается новый обьект HttpURLConnection, но где-то в глубине хранятся сокетные соединения, которые могут быть использованы повторно. Так сказано в документации. Однако меня смутила строка из документации к методу disconnect() :
Непонятно, как инстанс HttpURLConnection вообще можно использовать повторно. Это одноразовый обьект, создаваемый для одного запроса. Вторую фразу, наверное, можно понимать как "не думайте, что применение disconnect() позволит повторно использовать обьект". В смысле, что это невозможно никогда. PPS
http://java.sun.com/j2se/1.5.0/docs/api/ja...Connection.html
Это сообщение отредактировал(а) COVD - 7.8.2009, 14:32 |
||||||
|
|||||||
T_Serg |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 14.10.2007 Репутация: нет Всего: нет |
Я попробовал сделать как советуете:
Для некоторых сайтов это подходит. Контент совпадает и генериремые поля тегов совпадают. Для не которых это вариант не подошел (для google.com). Как найти универсальное решение? Может что то можно изменить в исходнике класса URLConnection? |
|||
|
||||
COVD |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
google.com всего лишь вставляет в страницу уникальные для каждого запроса ключи.
Программа выдает:
Запросы разные и в каждом ответе оригинальное значение ключа, а физическое соединение одно. Или не одно. Если сервер не поддерживает keepAlive, то на каждый запрос будет создаваться новое соединение. Но это скрыто от программиста. Программист работает с запросом. Необязательно использовать один и тот же обьект URL. Его можно создавать заново для каждого запроса. Если хост запросов одинаковый, то будет использоваться одно shared сокетное соединение (если сервер поддерживает этот режим и соединение не закрывается явно командой disconnect() на клиенте ). Это сообщение отредактировал(а) COVD - 7.8.2009, 15:25 |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 19 Всего: 538 |
Ну там написанно may be, так что я понимаю это implementation specific. Ну и плюс используемая версия протокола.
Имхо если уж так важен keep-alive, то я бы рекомендовал HttpClient, там над этим больше контроля. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |