# Индексирование вывода программ (виртуальные схемы URL `exec:` и `cgi:`)

DataparkSearch поддерживает виртуальные URL схемы `exec:` и `cgi:`, позволяющие запускать внешнюю программу. Эта программа должна выдавать результат своей работы в `stdout`. Результат должен быть оформлен по стандарту HTTP, т.е. заголовок ответа HTTP, а за ним содержимое документа.

Например, при индексировании обоих `cgi:/usr/local/bin/myprog` и `exec:/usr/local/bin/myprog`, `indexer` будет выполнять программу `/usr/local/bin/myprog`.

## Передача параметров для виртуальный схемы `cgi:`

При выполнении программы по виртуальной схеме `cgi:`, `indexer` эмулирует выполнение из-под HTTP сервера. Он создаёт переменную окружения REQUEST_METHOD со значением "GET" и переменную QUERY_STRING в соответствии со стандартами HTTP. Например, при индексировании `cgi:/usr/local/apache/cgi-bin/test-cgi?a=b&d=e` `indexer` создаёт QUERY_STRING со значением `a=b&d=e`. Виртуальная URL схема `cgi:` позволяет индексировать ваш сайт без веб-сервера, даже если необходимо индексировать CGI скрипты. Например, если для вашего веб-сервера статические документы находятся в `/usr/local/apache/htdocs/`, а CGI скрипты в `/usr/local/apache/cgi-bin/`, используёте следующую конфигурацию:

    Server http://localhost/
    Alias  http://localhost/cgi-bin/	cgi:/usr/local/apache/cgi-bin/
    Alias  http://localhost/		file:/usr/local/apache/htdocs/

## Передача параметров для виртуальной схемы `exec:`

`indexer` не создаёт переменной окружения QUERY_STRING как для схемы `cgi:`. Он создаёт командную строку с аргументами, указанными в URL после занка ?. Например, при индексировании `exec:/usr/local/bin/myprog?a=b&d=e`, будет выполнена слудующая команда с параметрами:

    /usr/local/bin/myprog "a=b&d=e"

## Использование виртуальной URL схемы `exec:` в качестве внешней системы получения

Виртуальную URL схему `exec:` можно использовать в качестве внешней системы получения документов. Это позволяет использовать для получения документов протоколы, не поддерживаемые DataparkSearch. Например, можно испрользовать программу `curl`, доступную с http://curl.haxx.se/ для индексирования HTTPS сайтов.

Поместите этот короткий скрипт в `/usr/local/dpsearch/bin/` под именем `curl.sh`.

    #!/bin/sh
    /usr/local/bin/curl -i $1 2>/dev/null

Этот скрипт берёт URL, указанный в качестве параметра командной строки и выполняет программу `curl` для получения этого документа. Ключ `-i` говорит `curl` выводить результат вместе с HTTP заголовками.

Теперь вы можете использовать такие команды в вашем `indexer.conf`:

    Server https://some.https.site/
    Alias  https://  exec:/usr/local/dpsearch/etc/curl.sh?https://

При индексировании `https://some.https.site/path/to/page.html`, `indexer` преобразует этот URL в

    exec:/usr/local/dpsearch/etc/curl.sh?https://some.https.site/path/to/page.html

выполнит скрипт `curl.sh`:

    /usr/local/dpsearch/etc/curl.sh "https://some.https.site/path/to/page.html"

и получит его вывод для дальнейшей своей работы.