HTTP-парсер
Для первичной обработки запроса используется HTTP-парсер, который вызывается неявно. Его название не требуется указывать в point'е при использовании фильтров, которые он предоставляет.
HTTP-парсер строит на основе базового запроса сложную структуру данных, к элементам которой можно обращаться при помощи следующих фильтров:
- URI;
- Path;
- Action_name;
- Action_ext;
- Get;
- Header;
- Post.
Использование фильтров в point'ах
Чтобы использовать фильтр в point’е, добавьте в point название фильтра в верхнем регистре.
Фильтр URI
Фильтр URI указывает на абсолютный путь до цели запроса. Абсолютный путь начинается с символа /
, следующего сразу за доменом или ip-адресом цели.
Фильтр URI указывает на строковое значение. Данный фильтр не может указывать на сложные структуры данных (массивы и хэш-таблицы).
Пример:
Point URI_value
будет указывать на значение /login/index.php
в запросе GET http://example.com/login/index.php
.
Фильтр Path
Фильтр Path указывает на массив с частями пути URI. К элементам этого массива необходимо обращаться по индексу. Индексация массива начинается с нуля.
Использование регулярных выражений в point'е
Индекс в point'е может являться регулярным выражением языка программирования Ruby.
Пример:
Для запроса GET http://example.com/main/login/index.php HTTP/1.1
фильтр Path указывает на следующий массив:
Индекс | Значение |
---|---|
0 | main |
1 | login |
Point
PATH_0_value
будет ссылаться на значениеmain
, которое находится в массиве, на который указывает фильтр Path, с индексом0
;Point
PATH_1_value
будет ссылаться на значениеlogin
, которое находится в массиве, на который указывает фильтр Path, с индексом1
.
Если URI запроса состоит только из одной части, фильтр Path будет указывать на пустой массив.
Пример:
Для запроса GET http://example.com/ HTTP/1.1
фильтр Path указывает на пустой массив.
Фильтр Action_name
Фильтр Action_name указывает на часть URI, начинающуюся после последнего символа /
и заканчивающуюся точкой.
Фильтр Action_name указывает на строковое значение. Данный фильтр не может указывать на сложные структуры данных (массивы и хэш-таблицы).
Пример:
Point
ACTION_NAME_value
будет указывать на значениеindex
для запросаGET http://example.com/login/index.php.
;Point
ACTION_NAME_value
будет указывать на пустое значение для запросаGET http://example.com/login/
.
Фильтр Action_ext
Фильтр Action_ext указывает на часть URI после последнего символа /
, начинающуюся с первой точки. Если эта часть отсутствует в запросе, то фильтр Action_ext не может быть использован в point'е.
Фильтр Action_ext указывает на строковое значение. Данный фильтр не может указывать на сложные структуры данных (массивы и хэш-таблицы).
Пример:
- Point
ACTION_EXT_value
будет указывать на значениеphp
для запросаGET http://example.com/main/login/index.php
; - Фильтр Action_ext не может быть использован в point'е, указывающем на запрос
GET http://example.com/main/login/
.
Фильтр Get
Фильтр Get указывает на хэш-таблицу с параметрами, расположенными в строке запроса. К элементам этой хэш-таблицы необходимо обращаться по имени параметра.
Использование регулярных выражений в point'е
Имя параметра в point'е может являться регулярным выражением языка программирования Ruby.
Параметры в строке запроса могут также содержать сложные структуры данных: массивы и хэш-таблицы. Для обращения к значениям, которые содержатся в этих структурах, необходимо использовать фильтры Array и Hash соответственно.
Пример:
Для запроса POST http://example.com/login?id=01234&username=admin
фильтр Get будет указывать на следующую хэш-таблицу:
Имя параметра | Значение |
---|---|
id | 01234 |
username | admin |
Point
GET_id_value
будет ссылаться на значение01234
, соответствующее имени параметраid
хэш-таблицы, на которую указывает фильтр Get;Point
GET_username_value
будет ссылаться на значениеadmin
, соответствующее имени параметраusername
хэш-таблицы, на которую указывает фильтр Get.
Фильтр Header
Фильтр Header указывает на хэш-таблицу с именами и значениями заголовков. К элементам этой хэш-таблицы необходимо обращаться по имени заголовка.
Имя заголовка в point'е
Имя заголовка в point'е может быть указано:
- Заглавными буквами;
- В том виде, в котором оно присутствует в запросе.
Использование регулярных выражений в point'е
Имя заголовка в point'е может являться регулярным выражением языка программирования Ruby.
Заголовки запроса могут также содержать массивы значений. Для обращения к значениям в массиве необходимо использовать фильтр Array.
Пример:
Для запроса
GET /login/index.php HTTP/1.1
Connection: keep-alive
Host: example.com
Accept-encoding: gzip
фильтр Header будет указывать на следующую хэш-таблицу:
Имя заголовка | Значение |
---|---|
Connection | keep-alive |
Host | example.com |
Accept-Encoding | gzip |
- Point
HEADER_Connection_value
будет ссылаться на значениеkeep-alive
, соответствующее заголовку с именемConnection
в хэш-таблице, на которую указывает фильтр Header; - Point
HEADER_Host_value
будет ссылаться на значениеexample.com
, соответствующее заголовку с именемHost
в хэш-таблице, на которую указывает фильтр Header; - Point
HEADER_Accept-Encoding_value
будет ссылаться на значениеgzip
, соответствующее заголовку с именемAccept-Encoding
в хэш-таблице, на которую указывает фильтр Header.
Фильтр Post
Фильтр Post указывает на содержимое тела запроса.
Вы можете использовать имя фильтра Post в point'е для того, чтобы работать с содержимым тела запроса.
Пример:
Для запроса
POST http://example.com/main/index.php HTTP/1.1
Content-Type: text/plain
Content-Length: 28
с телом
This is a simple body text.
point POST_value
будет указывать на значение This is a simple body text.
в теле запроса.
Вы также можете работать с телом запроса, содержащим сложные структуры данных. Для обращения к значениям, лежащим в структурах данных в теле запроса, в point'е после фильтра Post используйте следующие фильтры:
- Form_urlencoded для тела запроса в формате form-urlencoded;
- Multipart для тела запроса в формате multipart;
- Фильтры, предоставляемые парсером XML, для тела запроса в формате XML;
- Фильтры, предоставляемые парсером Json_doc, для тела запроса в формате JSON.
results matching ""
No results matching ""
results matching ""
No results matching ""