Переменная действия по умолчанию для start_form

#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 , поэтому, надеюсь, исходный код там поможет вам определить, откуда в вашей конфигурации берется этот дополнительный знак процента.