| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: GUI > Принять данные POST напрямую |
| Автор: alezzz 14.12.2011, 12:14 | ||||||||
| Есть скрипт который принимает xml от программы-клиента. Программа шлет xml методом POST, я вижу в логах апача что приходит постом, но при разборе того что пришло Data::Dumper-ом вижу что-то непонятное. Принимаю так:
Далее Dumper показывает:
как-будто данные пришли GET-ом. Пришлось сделать "костыль" и принять как:
Все работает, но глаз режет. Начал разбираться как это правильнее сделать. Пробовал принять из STDIN в разных вариантах, например:
Но ничего на выходе нет. Читаю man по СGI, но что-то не нахожу как принять напрямую данные. Добавлено через 5 минут и 5 секунд Извините, не в том разделе тему сделал |
| Автор: Pfailed 14.12.2011, 18:20 | ||
Как именно от клиента приходит?
Или без x-www-form-urlencoded? |
| Автор: alezzz 14.12.2011, 21:08 |
| CONTENT_TYPE = application/x-www-form-urlencoded; Charset=UTF-8 |
| Автор: DurRandir 14.12.2011, 22:48 | ||
Cуществует магический параметр, который вернёт вам "сырые" данные POST'a:
|
| Автор: alezzz 15.12.2011, 00:09 | ||
ага, существует
и программа написана не под мой скрипт, у меня просто шлюз конвертирующий в другой протокол, т.е. как-то ведь работало |
| Автор: DurRandir 15.12.2011, 03:36 |
| А _зачем_ вы делаете дамп этого $query? Т.е. вы попробовали, и вам тело запроса этот метод не вернул? Или вернул в каком-то другом виде? Т.к. то, что вы показываете, это не результат, полученный из $query->param('POSTDATA'). |
| Автор: alezzz 15.12.2011, 10:57 | ||||
Посмотрел HTTP::Request::Common, если передавать с контент-типом application/x-www-form-urlencoded не xml а данные как при GET запросе, например:
То все логично принимается, param('name1') = value1, param('name2') = value2. Видимо проблема нерешаема, криворукие разработчики неправильно сделали отправку xml. Из того же HTTP::Request::Common
_____ Просьба к модераторам переместить тему в "Perl: разработка для Web" |
| Автор: DurRandir 15.12.2011, 19:30 |
| В общем, действительно, если content-type=application/x-www-form-urlencoded, то POSTDATA нет. Если перед скриптом стоит nginx, и принимать он должен только такие "кривые" запросы, то укажите для этого location'a fastcgi_param CONTENT_TYPE "application/none" |
| Автор: alezzz 15.12.2011, 19:52 |
| DurRandir, на хостинге апач, но за совет спасибо. |