![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Наверняка кто-нибудь из опытных ява-программистов (сам я ещё зелёный, до этого 4 года писал на php) сталкивался.
Часть кода:
Вывод: Date: Fri Oct 09 21:32:03 MSD 2009 Type of content: text/html; charset=windows-1251 How old: 0 Last edit: Thu Jan 01 03:00:00 MSK 1970 Content-Length: -1 Вопрос в том, почему getContentLength() возвращает -1, а не число символов контента? Хотя все остальные данные возврата верны. Это сообщение отредактировал(а) serghd - 9.10.2009, 20:35 |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Вызов openConnection() - это еще не отсылка запроса. Это типичное заблуждение. Вы смотрите значения параметров в момент когда запрос еще не был отослан. Следовательно, не был получен ответ. Следовательно длина ответа неизвестна, т.е. -1. Если сервер пришлет ответ мелкими порциями, т.е. в режиме chunked, то в хедере ответа полная длина также не будет указана, потому что сервер при отправке хедера не знал полную длину отсылаемых данных. Например, извлекал их из базы данных и по мере извлечения отправлял.
|
|||
|
||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
да, но
1) неизвестная длина ответа только контента, остальные данные были получены (или они выдаются независимо от того, был запрос или нет?); 2) писалось это на основе руководства по яве, там всё почему-то работает как надо, хотя код тот же. >>"Вызов openConnection() - это еще не отсылка запроса." Тогда что есть отсылка? Это сообщение отредактировал(а) serghd - 9.10.2009, 21:09 |
|||
|
||||
COVD |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
Вы, очевидно, наблюдали дефолтные значение параметров соединения.
Запрос отсылается после вызова getInputStream() или getResponseCode() (если используете HttpURLConnection, наследника URLConnection). Возможно также getResponseMessage() . Именно в этот момент, означающий, что вы окончательно закончили формировать запрос и перешли к обработке ответа, и отсылаются данные на сервер. После вызова этих методов любая попытка что-то дослать на сервер через данное соединение ( например, вызвав getOutputStream() ) вызовет выброс исключения. Поэтому для каждой пары запрос-ответ надо создавать новый обьект URLConnection или HttpURLConnection. При этом может использоваться одно физическое сокетное соединение с сервером, но это скрыто от программиста. P.S.
Вы невнимательно читали руководство. Или автор руководства невнимательно читал другое руководство. Или я ошибаюсь. Всякое бывает : ) Это сообщение отредактировал(а) COVD - 9.10.2009, 21:51 |
||||
|
|||||
serghd |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 136 Регистрация: 5.10.2009 Репутация: нет Всего: нет |
Руководство: JAVA 2. П. Ноутон, Г. Шилдт., страницы 561-562. Не знаю опечатка там, недопечатка или ещё что-нибудь...
Книгу эту изучаю первой (из 5-ти), так что она у меня в новом для меня языке JAVA "первопроходец". Полностью делал по примеру на указанных страницах, но длина потока всё равно была -1. Проблему решил (после перебора многих других вариантов) следующим образом:
Всё оказалось более чем просто (хотя hpCon.getContentLength() всё равно -1, но это уже наверное другая тема). Против опыта не пойдёшь, тем не менее "проблема" решена. Это сообщение отредактировал(а) serghd - 10.10.2009, 19:27 |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 11 Всего: 43 |
это chunked - в хедере респонса есть поле Transfer-Encoding = chunked, а поля Content-Length нет. http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.6 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |