Forum Webscript.Ru

Программирование => Perl => Тема начата: EroX от 22 Июня 2003, 16:54:16

Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: EroX от 22 Июня 2003, 16:54:16
Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя (т.е. вывожу что в STDIN... все переменные есть... правда не & и = там... а какието другие символы....

Обычная расшифровка происходит (декодинг)... но ни одна переменная не извлекается... хотя через Get все нормально работает...(вот только не подходит мне Get данных надо уж очень много передавать)....

Чего не так ... может все таки какието ограничения есть на ПОСТ или чтото подобное........

Хелп попмогите!!!!!!!!!!
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Mog. от 22 Июня 2003, 18:15:21
Цитировать
EroX:
Обычная расшифровка происходит (декодинг)...
Что значит обычная? Рукописная, чтоль? Типа
my @pairs = split(/$boundary/, $buffer);
foreach (@pairs){
my ($name, $value) = split(/=/, $_);
$value =~ tr/+/ /;
Если да, то это только для гета и подходит, т.к. ПОСТом переданные данные оформлены по другому... Слегка :)

Рекомендую, не забивай себе голову всякими рукописными парсерами для разбора форм, особенно если не знаешь точно как они работают. А пользуй, мил друг, модуль CGI.pm . Ну например таким образом:

use CGI qw( param );
$name_from_form=param(\'name_from_form\');

И рекомендую почитать перлдок по поводу CGI модуля, способствует тоже. И документацию по http протоколу. Как минимум по методам запросов и различиями оных.
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: EroX от 22 Июня 2003, 18:37:54
Да именно старым методом декодировать....
То что там другие данные эт я уже расмотрел :)))

А вот как с помощью CGI.pm это сделать так и не понял... нашел я тут один прелдок по этому модулю... а там почти ничего и не написанно... так в кратце чтото...
Не подскажеш где взять на него документацию.........
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Mog. от 22 Июня 2003, 19:05:10
Цитировать
EroX:
как с помощью CGI.pm это сделать так и не понял
пишу же
Цитировать
Mog.:
use CGI qw( param );
$name_from_form=param(\'name_from_form\');
Чего проще?

Цитировать
EroX:
где взять на него документацию

perldoc CGI
по моему достаточно
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Phoinix от 22 Июня 2003, 20:42:26
IMHO проще так...

$buffer = $ENV{\'QUERY_STRING\'};
if ($ENV{\'REQUEST_METHOD\'} eq "POST") {read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'})}

и не морочить голову с CGI, смысл использовать этот модуль только для получения переменных окружения???

P.S. Это продолжение кода...

 @pairs = split(/&/, $buffer);
 foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);
  $name =~ tr/+/ /;
  $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ s//
/g;
  $value =~ s/  $value =~ s/>/>/g;
  $value =~ s/\\cM/
/g;
  $value =~ s/\\n/ /g;
  $value =~ s/\\|/ /g;
  $value =~ s/\\|/ /g;
  $value =~ s/<([^>]|\\n)*>/
/g;
  $FORM{$name} = $value;
 }

Я использую этот код как стандартную функцию, и ни разу не подводила... и GET и POST нормально работает... правда HTML код перекрывает, но по большей части оно так и нужно...
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Wyclef от 22 Июня 2003, 20:57:25
Цитировать
Phoinix:
и не морочить голову с CGI, смысл использовать этот модуль только для получения переменных окружения

...так вот для чего он нужен :)))
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Wyclef от 22 Июня 2003, 21:04:01
Цитировать
Wyclef:
нашел я тут один прелдок по этому модулю... а там почти ничего и не написанно...

Как сказал Mog. вполне достаточно выполнить "perldoc CGI", можно даже "perldoc CGI > CGI.txt" и pod2html тоже никто не отменял, просто выдели немного времени и почитай внимательно и будет тебе щасте. ;)
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Yaroslav от 22 Июня 2003, 22:44:13
Цитировать
Wyclef:
А пользуй, мил друг, модуль CGI.pm

вот уже какой раз я такое слышу, но вот что это такое так и не в курил..)))
с Перлом (хоть я и его не знаю тоже) вроде как попроще, но все же, был хоть какой то текст на русском, по которому хоть что то научился делать....
может и для этого CGI.pm такой где то найдется?
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Mog. от 23 Июня 2003, 08:02:41
Цитировать
Phoinix:
смысл использовать этот модуль только для получения переменных окружения???
Где это ты там видел переменные окружения?
Цитировать
Phoinix:
и GET и POST нормально работает
А когда ты файлы передаешь через форму ? Каким парсером ты пользуешся ? (Тут я лукавлю, ибо сам то для этого пользуюсь рукописным :) )

Цитировать
Phoinix:
IMHO проще так...
ИМХО, если понимаешь как это работает.
Цитировать
Wyclef:
...так вот для чего он нужен ))
кожаный хвост :)
Цитировать
Yaroslav:
вот уже какой раз я такое слышу, но вот что это такое так и не в курил..)))
Курить вредно (говорят)
Цитировать
Yaroslav:
с Перлом (хоть я и его не знаю тоже) вроде как попроще
Без комментариев :)
Цитировать
Yaroslav:
какой то текст на русском
Млин, да там на английском текст такой, что проще не бывает + примеры тут же . Это про перлдок я.
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Phoinix от 23 Июня 2003, 10:59:47
Цитировать
Mog.
А когда ты файлы передаешь через форму ? Каким парсером ты пользуешся ? (Тут я лукавлю, ибо сам то для этого пользуюсь рукописным  )

Ну скажем про файлы разговора не было, только про передачу данных...
P.S. я тоже пользуюсь рукописным...

Цитировать
Mog.
Где это ты там видел переменные окружения?

Тогда я что-то не понимаю... а что же тогда это?
$ENV{\'QUERY_STRING\'}; если не переменная окужения? :-))

Цитировать
Mog.
ИМХО, если понимаешь как это работает

Может будем без условностей???
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: EroX от 23 Июня 2003, 11:48:04
Вот все говорят... типа данные полученные методом POST такие же как и GET.......... ага не тут то было в том то и дело... они не с помощью & и = кодируються... а по другому... (вывод сделан припросмотре STDIN... они разделяются по типу (типа multipart и т.д) а также еще какаято строка лепится после ключа-значения (причем ключ взят в кавычки а значение разделено с ним переводом строки (могет быть возратом каретки))... которая изменяет после каждой новой отсылке из формы... (куча дуфисов и цифровой код какойто)... того сдандартным метотодом декодирования ничего не получается вытянуть........

Вот такая вот грусная история.........
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Chs от 23 Июня 2003, 14:04:17
В форме enctype=multypart/form-data? :)
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: EroX от 23 Июня 2003, 14:14:32
Ага... именно это.........

Но вот я нашел как задать чтобы данные передавались обычным способом (разделители & и =)

Content-Type: application/x-www-form-urlencoded надобно задать в форме.......

Правда еще не попробывал но дума на 99% что это заставит эго разбивать данные именно через & и =
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: EroX от 23 Июня 2003, 14:16:37
Ого обшибочек сколько и глупо сформулированных фраз....... уж извените..... писал на радостях что кажется нашел решение проблемы......:D
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Mog. от 23 Июня 2003, 15:47:12
EroX, ты эта, не горячись :)

Цитировать
EroX:
Content-Type: application/x-www-form-urlencoded
Это значение по умолчании, т.е. когда ты вообще про формат данных не упоминаешь в форме (вроде)

Цитировать
EroX:
через & и =
"&" и "=" при ПОСТе присутствует, т.к. "name=value&name2=value2 и т.д." и от этого никуда не денешся.
При enctype=multypart/form-data данные в теле запроса разделены разделителем
Цитировать
EroX:
(куча дуфисов и цифровой код какойто)...
Вот это он и есть
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Wyclef от 23 Июня 2003, 21:42:56
Цитировать
Yaroslav:
какой то текст на русском, по которому хоть что то научился делать...
может и для этого CGI.pm такой где то найдется?

В который раз здесь пишут, срочно качать если еще нету:
Документация CGI.pm v2.56 (рус) (http://perldoc.narod.ru/cgi-ref.pdf)
Цитировать
Mog.:
кожаный хвост :)

Надеюсь уважаемая пиблика меня поняла... и это не что-то ругательное ;)
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: EroX от 24 Июня 2003, 12:06:08
Все работает так как должно бы было с
Content-Type: application/x-www-form-urlencoded

но вот вопрос почему же он автоматически не устанавливался??? от чего это может зависить???

хотя можно конечно не забивать голову и в формах указывать принудительно, каким образом пересылать данные......

но Однакао....... почему же так происходит то???
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: EroX от 24 Июня 2003, 17:12:58
Вот жаль так никто и не ответил........
Название: Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя
Отправлено: Yaroslav от 24 Июня 2003, 18:39:13
Цитировать
Wyclef:
В который раз здесь пишут, срочно качать если еще нету:
Документация CGI.pm v2.56 (рус)

это спасибо значит будет :)