Forum Webscript.Ru
Программирование => Perl => Тема начата: EroX от 22 Июня 2003, 16:54:16
-
Почему через Post не передаются данные, вернее они там есть но их выдрать нельзя (т.е. вывожу что в STDIN... все переменные есть... правда не & и = там... а какието другие символы....
Обычная расшифровка происходит (декодинг)... но ни одна переменная не извлекается... хотя через Get все нормально работает...(вот только не подходит мне Get данных надо уж очень много передавать)....
Чего не так ... может все таки какието ограничения есть на ПОСТ или чтото подобное........
Хелп попмогите!!!!!!!!!!
-
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 протоколу. Как минимум по методам запросов и различиями оных.
-
Да именно старым методом декодировать....
То что там другие данные эт я уже расмотрел :)))
А вот как с помощью CGI.pm это сделать так и не понял... нашел я тут один прелдок по этому модулю... а там почти ничего и не написанно... так в кратце чтото...
Не подскажеш где взять на него документацию.........
-
EroX:
как с помощью CGI.pm это сделать так и не понял
пишу же
Mog.:
use CGI qw( param );
$name_from_form=param(\'name_from_form\');
Чего проще?
EroX:
где взять на него документацию
perldoc CGI
по моему достаточно
-
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/</g;
$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 код перекрывает, но по большей части оно так и нужно...
-
Phoinix:
и не морочить голову с CGI, смысл использовать этот модуль только для получения переменных окружения
...так вот для чего он нужен :)))
-
Wyclef:
нашел я тут один прелдок по этому модулю... а там почти ничего и не написанно...
Как сказал Mog. вполне достаточно выполнить "perldoc CGI", можно даже "perldoc CGI > CGI.txt" и pod2html тоже никто не отменял, просто выдели немного времени и почитай внимательно и будет тебе щасте. ;)
-
Wyclef:
А пользуй, мил друг, модуль CGI.pm
вот уже какой раз я такое слышу, но вот что это такое так и не в курил..)))
с Перлом (хоть я и его не знаю тоже) вроде как попроще, но все же, был хоть какой то текст на русском, по которому хоть что то научился делать....
может и для этого CGI.pm такой где то найдется?
-
Phoinix:
смысл использовать этот модуль только для получения переменных окружения???
Где это ты там видел переменные окружения?
Phoinix:
и GET и POST нормально работает
А когда ты файлы передаешь через форму ? Каким парсером ты пользуешся ? (Тут я лукавлю, ибо сам то для этого пользуюсь рукописным :) )
Phoinix:
IMHO проще так...
ИМХО, если понимаешь как это работает.
Wyclef:
...так вот для чего он нужен ))
кожаный хвост :)
Yaroslav:
вот уже какой раз я такое слышу, но вот что это такое так и не в курил..)))
Курить вредно (говорят)
Yaroslav:
с Перлом (хоть я и его не знаю тоже) вроде как попроще
Без комментариев :)
Yaroslav:
какой то текст на русском
Млин, да там на английском текст такой, что проще не бывает + примеры тут же . Это про перлдок я.
-
Mog.
А когда ты файлы передаешь через форму ? Каким парсером ты пользуешся ? (Тут я лукавлю, ибо сам то для этого пользуюсь рукописным )
Ну скажем про файлы разговора не было, только про передачу данных...
P.S. я тоже пользуюсь рукописным...
Mog.
Где это ты там видел переменные окружения?
Тогда я что-то не понимаю... а что же тогда это?
$ENV{\'QUERY_STRING\'}; если не переменная окужения? :-))
Mog.
ИМХО, если понимаешь как это работает
Может будем без условностей???
-
Вот все говорят... типа данные полученные методом POST такие же как и GET.......... ага не тут то было в том то и дело... они не с помощью & и = кодируються... а по другому... (вывод сделан припросмотре STDIN... они разделяются по типу (типа multipart и т.д) а также еще какаято строка лепится после ключа-значения (причем ключ взят в кавычки а значение разделено с ним переводом строки (могет быть возратом каретки))... которая изменяет после каждой новой отсылке из формы... (куча дуфисов и цифровой код какойто)... того сдандартным метотодом декодирования ничего не получается вытянуть........
Вот такая вот грусная история.........
-
В форме enctype=multypart/form-data? :)
-
Ага... именно это.........
Но вот я нашел как задать чтобы данные передавались обычным способом (разделители & и =)
Content-Type: application/x-www-form-urlencoded надобно задать в форме.......
Правда еще не попробывал но дума на 99% что это заставит эго разбивать данные именно через & и =
-
Ого обшибочек сколько и глупо сформулированных фраз....... уж извените..... писал на радостях что кажется нашел решение проблемы......:D
-
EroX, ты эта, не горячись :)
EroX:
Content-Type: application/x-www-form-urlencoded
Это значение по умолчании, т.е. когда ты вообще про формат данных не упоминаешь в форме (вроде)
EroX:
через & и =
"&" и "=" при ПОСТе присутствует, т.к. "name=value&name2=value2 и т.д." и от этого никуда не денешся.
При enctype=multypart/form-data данные в теле запроса разделены разделителем
EroX:
(куча дуфисов и цифровой код какойто)...
Вот это он и есть
-
Yaroslav:
какой то текст на русском, по которому хоть что то научился делать...
может и для этого CGI.pm такой где то найдется?
В который раз здесь пишут, срочно качать если еще нету:
Документация CGI.pm v2.56 (рус) (http://perldoc.narod.ru/cgi-ref.pdf)
Mog.:
кожаный хвост :)
Надеюсь уважаемая пиблика меня поняла... и это не что-то ругательное ;)
-
Все работает так как должно бы было с
Content-Type: application/x-www-form-urlencoded
но вот вопрос почему же он автоматически не устанавливался??? от чего это может зависить???
хотя можно конечно не забивать голову и в формах указывать принудительно, каким образом пересылать данные......
но Однакао....... почему же так происходит то???
-
Вот жаль так никто и не ответил........
-
Wyclef:
В который раз здесь пишут, срочно качать если еще нету:
Документация CGI.pm v2.56 (рус)
это спасибо значит будет :)