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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HTTP POST запрос, проблема при кодировке параметра 
:(
    Опции темы
unkis
Дата 13.12.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ребята у меня такая проблема, нужно организовать один POST запрос, это я реализую с помощью HTTP Client от Apache.

Проблема в том, что в параметре присутствует знак %, Который при передачи почему-то кодируется в %25.

Так вот как сказать что-бы при передачи ничего не кодировалось?


--------------------
www.unkis.com
PM MAIL WWW   Вверх
v2v
Дата 13.12.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



А где ошибка ? 25 - это ASCII код знака % , а знак % добавляет Http Client что бы указать серверу что дальше идёт ASCII код.


--------------------
PM   Вверх
COVD
Дата 14.12.2008, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

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



Просветите, а зачем в POST что-то надо кодировать? В GET - понятно, там параметры включены в строку адреса. Поскольку в параметре могут быть недопустимые для семантики адреса символы ( пробелы, .. ), то их заменяют на %..  

Практический совет - используйте сановский стандартный URLConnection. 
PM MAIL   Вверх
ivg
Дата 14.12.2008, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



Цитата(COVD @  14.12.2008,  04:09 Найти цитируемый пост)
Просветите, а зачем в POST что-то надо кодировать?

В соответствии со спецификацией HTML при передаче данных форм с Content-Type: application/x-www-form-urlencoded
PM MAIL   Вверх
COVD
Дата 14.12.2008, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

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



Спасибо, понятно. 

Тогда "что-бы при передачи ничего не кодировалось" надо просто указать другой Content-Type - text/html, например. 

PS. Все же, не ясно, зачем спецификация имеет Content-Type: application/x-www-form-urlencoded. Наверное, потому, что ввод из формы допускается отсылать на сервер также и методом GET. Если же POST используется, то вроде нет необходимости в кодировании: достаточно указать, что текст и тогда никаких проблем с определением конца строки и конца данных на сервере не возникает. Соответственно, нет необходимости использовать Content-Type: application/x-www-form-urlencoded в описании html - формы, если POST. 
PM MAIL   Вверх
ivg
Дата 14.12.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



Цитата(COVD @  14.12.2008,  22:27 Найти цитируемый пост)
Тогда "что-бы при передачи ничего не кодировалось" надо просто указать другой Content-Type - text/html, например

С точки зрения сервера это было бы логично. С другой стороны при передаче данных в теле HTTP сообщения заголовок Content-Type должен быть указан:
Цитата

Any HTTP/1.1 message containing an entity-body SHOULD include a Content-Type header field defining the media type of that body.
 Ну а то что им оказался application/x-www-form-urlencoded и что при этом необходимо "urlencod'ить" имена и значения параметров - видимо исторически так сложилось, обратная совместимость и т.д. Изначально логика, по видимому, была в том, чтобы одним образом обрабатывать параметры и GET и POST запросов. Кстати в современной спецификации сервлетов она также присутствует. Что же касается конкретно HttpClient, то, чтобы избежать "urlencod'инга" лучше, по моему, использовать метод setRequestEntity() (в версиях 3.0-3.1), см. исходники.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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