#html #perl
#HTML #perl
Вопрос:
В настоящее время я нахожусь в процессе написания собственного веб-сервера для обработки cgi-скриптов. В моем текущем тестовом скрипте perl у меня есть этот небольшой фрагмент кода
print start_html("CGI Test Page"),
h1("CGI Test Page"),
h2("Post Test:"),
start_form(-method=>"POST",),
"Post Value: ",textfield('postKey'),
submit("Submit Post"),
end_form;
как вы можете видеть, start_html не имеет параметра действия, назначенного в определении формы. Но с помощью этого кода я получаю следующий вывод html для этого определения формы:
<form method="post" action="/cgitest.cgi%" enctype="multipart/form-data">
Я получаю этот нечетный символ, добавленный в конец переменной действия. Итак, мой вопрос заключается в следующем: поскольку я не определяю значение действия в скрипте perl, какую переменную среды он использует для определения своего действия?
Комментарии:
1. Я не могу воспроизвести ваш код. Это должно означать, что это что-то другое в вашей конфигурации, а не в этой части вашего кода.
2. @Afresh1 О, я уже знаю, что это что-то в моей конфигурации. Я не использую Apache или что-то в этом роде, я использую лично созданный сервер. На самом деле нет способа воспроизвести ее на вашем конце, если я не предоставлю вам весь код сервера. Таким образом, если я знаю, что этот метод использует в качестве значения действия по умолчанию, я могу изолировать проблему от определенной переменной среды, которую я отправляю в сценарий cgi. Моя интуиция подсказывает мне, что она использует переменную среды REQUEST_URI , но если я выполняю printf этой переменной перед ее отправкой, у нее не будет символа, прикрепленного к концу, как в html.
Ответ №1:
Вот соответствующая часть из CGI.pm источник:
if (defined $action) {
$action = $self->_maybe_escapeHTML($action);
}
else {
$action = $self->_maybe_escapeHTML($self->request_uri || $self->self_url);
}
Как вы уже догадались, если вы не определяете действие, оно пытается использовать $ENV{'REQUEST_URI'}
, но если оно пустое, оно использует URL-адрес скрипта. Подпрограммы, которые определяют этот URL, являются self_url
и url
, поэтому, надеюсь, исходный код там поможет вам определить, откуда в вашей конфигурации берется этот дополнительный знак процента.