CGI програмиране от самото начало получаване на параметри с CGI скрипт (gi) бюлетин

Както обещах, в този брой ще разгледаме получаването на информация с CGI скрипт.

Каква информация могат да получат CGI скриптовете?

Според стандарта CGI за прехвърляне на информация към скрипта се използват променливите на околната среда (наричани още „променливи на околната среда“) от стартирането на скрипта, а понякога и „стандартният вход“ на скрипта: ако HTTP методът, избран от клиента към стартирайте скрипта предвижда наличието на HTTP заявка "тяло", след което съдържанието на това тяло на заявката се предава на скрипта при стандартно въвеждане. Останалата информация се предава чрез променливи на околната среда.

Променливите на околната среда са достъпни за скрипта Perl като "стандартен" хеш % ENV.

За да видите кои променливи на средата вашият уеб сървър предава на скрипта, можете да стартирате специален скрипт върху него, който просто чете всичките си променливи на средата и ви ги издава в браузъра:

Както ще видите, много информация се предава на скрипта с помощта на променливи на средата.

По едно време събрах „до купчината“ и систематизирах променливите на средата на CGI в един вид справочна статия, която можете да намерите тук. Има и описание на променливите на средата на CGI, "специфични" за сървъра Apache (който е най-често срещан в WWW) и за скриптове, извикани чрез SSI.

Предаване на параметрите на повикванията към скрипта

Засега нека разгледаме как параметрите на повикванията се предават на скрипта.

В по-голямата част от случаите един от двата HTTP метода - GET или POST - се използва за извикване на CGI скриптове. В зависимост от метода на обаждането параметрите на заявката се предават от уеб сървъра на скрипта по различни начини.

Методът за извикване на скрипт се предава на CGI скрипта в променлива на среда ЗАЯВКА_МЕТОД. Нека разгледаме по-отблизо тези методи, предимствата и недостатъците на всеки от тях.

GET метод - това е "обичайният" метод, който се използва най-често. Този метод изисква всеки уеб ресурс от сървъра. Когато използвате този метод, браузърът предава параметри (ако е необходимо) в самия URL адрес на скрипта след „?'.

По този начин, когато скриптът се извика с този метод, параметрите, предадени на скрипта, всъщност са част от URL адреса.

Това води както до предимствата, така и до недостатъците на този метод за извикване на скрипт. Основното предимство на този метод е, че заявка за скрипт може да бъде направена не само от HTML форми (ще говорим за тях подробно в следващата версия), но и по всякакъв друг начин - например директна връзка или друг начин за искане на URL. Например, в случай на графичен брояч на посетители (който се извиква от уеб страница чрез ) може да се предадат някои параметри директно в неговия URL:

Основният недостатък на този метод е, че максималната дължина на URL адреса е ограничена, поради което този метод може да предава много ограничено количество информация. Точната стойност за максималната дължина на URL адреса зависи както от вашия конкретен уеб сървър, така и от вашия конкретен браузър. Спецификацията HTML 4.0 не препоръчва използването на метода GET, ако общата дължина на низа на параметъра може да надвишава 100 знака.

Друг недостатък е, че не всички символи могат да бъдат предадени в URL низа.

Скриптът получава параметрите на повикването, използвайки метода GET от променливата на средата QUERY_STRING.

POST метод

За разлика от метода ВЗЕМЕТЕ, метод ПОСТ специално служи за изпращане на данни към сървърни приложения. При извикване на скрипта от метода ПОСТ параметрите се предават на скрипта не като част от URL адреса, а в тялото на HTTP заявката (скриптът ги получава при стандартно въвеждане). Съответно общата дължина на параметрите няма такива строги ограничения и може да бъде десетки килобайта.

При извикване на скрипта от метода ВЗЕМЕТЕ тази променлива има стойност 'ВЗЕМЕТЕ', когато се извиква от метода ПОСТ - 'ПОСТ". Между другото, тази променлива може да приеме други стойности - ако извикване на скрипт се вмъкне в страницата с помощта на SSI, тогава променливата ЗАЯВКА_МЕТОД има значението "ВКЛЮЧЕТЕ'.

Сега нека напишем прост скрипт, който взема параметрите, предадени към него, и ги извежда в браузъра. Като начало ще приеме параметрите, предадени от метода ВЗЕМЕТЕ.

Сега запазете този скрипт на вашия уеб сървър в cgi папка под името, да речем, test.cgi. Да предположим, че е наличен на уеб сървъра на URL адреса

Ако всичко е направено правилно, след като поискате този URL в браузъра, ще получите отговора:

След дебелото черво няма да има нищо, защото все още не сме предали никакви параметри.

Сега опитайте да предадете последователността от символи в URL след знака „?“ В скрипта, кажете:

В отговор трябва да получите

Низ на заявка: 12345abcde

тези. последователността от символи, които сте посочили в URL адреса след въпросителния знак.

Най-често параметрите се предават като низ в следния формат:

тези. името на параметъра се отделя от стойността чрез '=', а параметрите са разделени с'&'.

Това е такъв низ от параметри, които браузърът генерира, когато изпраща съдържанието на HTML форма. Това е "често срещаният" формат на низ за заявка.

Параметри за разбор

За да може скриптът да използва параметрите, предадени му в работата си, той трябва да ги „избере“ от предадения низ на параметъра (той е и „низът на заявката“) - с други думи, анализиране на низа на параметъра.

В CGI скриптове в Perl е удобно да използвате функцията разделен, които могат да разделят низ на части и да върнат тези части като масив:

Тук низ - това е оригиналният разделен низ, разделител - разделител (последователност от символи, която разделя частите за търсене в оригиналния низ).

Като цяло това е много удобна функция за работа с база данни „текст“ и много други неща.

Да кажем в фрагмент като този: функция разделен ще върне масив с елементи "ааа","bbb","куб".

Сега да се върнем към нашия конкретен случай - разбор на параметри от низ, предаден на скрипта. Както можете да видите от неговия формат (вижте по-горе), синтактичният анализ е разделен на два етапа:

  1. Извличане на параметри от низ за заявка
  2. Открояване на името и стойността на всеки параметър

В първия случай разделителят ще бъде символът '&', във втория - символът '='.

Този фрагмент "анализира" низа на заявката и формира хеш% PARAM с предадените параметри.

Този код (може би малко по-сложен) ще се използва в почти всеки CGI скрипт - а именно в онези скриптове, които вземат параметри.

Приемане на параметри, предадени по метод ПОСТ, се различава леко: както писах по-горе, при използване на този метод параметрите се предават не в променлива на среда, а на „стандартния вход“ на скрипта, т.е. методите за трансфер се различават според източника.

В някои случаи е желателно скриптът да може да получава данни и по двата начина. Това не е трудно - в края на краищата скриптът се предава по метода на заявката си; той може да го анализира и да действа по два начина:

Това е всичко за днес. В следващото издание ще разгледаме по-отблизо Web Forms - мощен HTML инструмент, който ви позволява да създадете „потребителски интерфейс“ за скриптове на уеб страници и по този начин да дадете на потребителя възможността да задава параметри на заявката за скрипт в удобна, "човешка" форма.