Как получить html код страницы lazarus

fcl-web/cs

Содержание

Что такое fpWeb?

fpWeb можно использовать для создания приложений веб-сервера. Приложение веб-сервера может быть одним из следующих:

  • CGI-приложение
  • FastCGI-приложение
  • модуль Apache
  • Автономный HTTP-сервер который использует компоненты HTTP-сервера Free Pascal.
  • Автономный HTTP-сервер, использующий GNU libmicrohttp
  • Приложение Windows SysHTTP.

Во всех случаях модель разработки одинакова: вы регистрируете обработчики для набора URL-адресов (называемых маршрутами), которые будет поддерживать ваше приложение.

Далее будет вставьте эти маршруты в одну из вышеперечисленных сред: то есть вы выбираете объект приложения, которое хотите использовать.

В IDE lazarus у вас есть выбор приложений при запуске нового проекта. После запуска приложения вы можете изменить тип приложения, обычно просто изменив имя модуля в разделе использования проекта.

Можно поддерживать несколько сред в одном двоичном файле, хотя это требует дополнительной работы.

fpWeb также предлагает прямую поддержку сервера базы данных RESTful или механизмов JSON RPC 2.0. Они построены на предыдущей структуре. Платформа Brook также основана на базовой архитектуре, описанной выше.

Подробнее об этом можно прочитать в руководстве по fpWeb

Использование fpWeb con Lazarus

Установка вебблаза fpWeb Lazarus package

Первым шагом является установка пакета, расположенного по адресу lazarus/components/fpweb/weblaz.lpk. Как обычно с пакетами во время разработки вам придется перестроить Lazarus.

Создать приложение CGI

После установки пакета weblaz вы можете создать очень простое веб-приложение CGI, отображающее HTML, перейдя в меню Lazarus File — New. «. Выберите «CGI Application» из списка возможных приложений, как показано на изображении ниже, что создаст основной файл проекта CGI и веб-модуль fpweb.

TFPWebModule позволяет управлять свойствами и событиями с помощью инспектора объектов.

Чтобы добавить код для отображения страницы, необходимо добавить обработчик запросов.Для этого дважды щелкните свойство OnRequest в инспекторе объектов. , как показано на рисунке ниже:

В обработчике события вы должны написать код HTML, который будет отображаться в браузере, чтобы избежать смешивания Паскаля и HTML. Страница может быть загружена из каталога, где находится исполняемый файл CGI, с помощью AResponse.Contents.LoadFromFile().

Тип ответа должен быть установлен на AResponse.ContentType. Для HTML-страниц это должен быть ‘text/html; charset=utf -8’.

Наконец, для параметра Handled должно быть установлено значение True для ind. Укажите, что запрос был успешно обработан (и возврат и код состояния 200 OK для подтверждения). ликеры). После добавления этого кода веб-модуль должен выглядеть следующим образом:

Развертывание приложения CGI

В этом разделе предполагается, что вы используете веб-сервер Apache. Конечно, вы можете использовать другие веб-серверы, совместимые с CGI (nginx, cherokee).

Apache можно скачать здесь: http://httpd.apache.org/download.cgi или установите с помощью диспетчера пакетов. .

При установке Apache по умолчанию все файлы, расположенные в вашем каталоге cgi-bin, будут рассматриваться как программы CGI, поэтому расположенные там простые файлы HTML не будут доступны пользователю. Этот каталог можно указать в файле httpd.conf в следующем разделе:

Если вы поместите исполняемый файл с именем «mywebpage.cgi» в этот каталог, страница будет доступна как http://localhost/cgi. -bin/mywebpage.cgi (или удаленно с соответствующим IP-адресом или доменным именем) .

Fcl-web с Lazarus в Windows создает файлы .exe. Чтобы Apache обслуживал эти файлы, вам нужно добавить это:

А чтобы ваши исполняемые файлы обслуживались из другого каталога, добавьте это:

Формат HTML и читаемое поле запроса

выше пример отображает простую HTML-страницу. Например, вы можете захотеть, чтобы

  • динамически изменяла HTML-вывод страницы, а
  • — путем считывания переменных, переданных на веб-страницу браузером в запросе. полей (например, в действиях HTTP GET и HTTP POST).

Простое решение первой проблемы состоит в том, чтобы просто использовать стандартную процедуру форматирования Pascal, добавляя %s или %d в файл HTML в соответствующих местах, которые получат пользовательское значение.

Читайте также:  Как получить автограф джонни деппа

Чтение данных GET

Вы можете использовать ARequest.QueryFields, который является потомком TStrings, для чтения переменных GET. Каждая переменная будет находиться на отдельной строке в TStrings в формате имя_переменной = значение, подобно se отображается по адресу страницы браузера. Вы можете использовать ARequest.QueryFields.Values[] для поиска определенной переменной, передавая имя переменной в круглых скобках, чтобы получить ее значение, вместо того, чтобы вручную анализировать строку.

Чтение данных POST

Данные, отправленные запросами POST, можно получить из TRequest.Content. У него не будет заголовков запроса; другими словами, он будет содержать тело запроса.

Доступ к отправленным данным формы также можно получить через TRequest.ContentFields , который представляет собой содержимое, проанализированное как поля, разделенные & и расшифровано. Например, следующий набор значений формы:

будет преобразован в ‘APPLICATION/X-WWW-FORM-URLENCODED’ следующим образом (см. POST wikipedia (HTTP)):

И это будут доступны в TRequest.ContentFields через индекс строки или через свойство Values, в зависимости от того, что удобнее:

Если вы используете типы MIME, отличные от ‘MULTIPART/FORM-DATA’ и ‘APPLICATION/X -WWW-FORM-URLENCODED’ (типы, совместимые с формами HTML):

  • Контент доступен только в TRequest.Content, но не в TRequest.ContentFields
  • с использованием этих Типы MIME вызывают исключение для FPC 2.4.2 (исправлено в FPC 2.5+).

Обратите внимание, что HTTP POST также может отправлять поля запроса (в URL-адресе), такие как http://server/bla?question=how, и TRequest.QueryFields обращается к ним, как описано в предыдущем раздел .

Чтение двоичных данных POST

Загруженные файлы хранятся во временной папке с временным именем файла; он нужен для сохранения файла переместите в постоянное место.

Чтобы получить данные на размещенном сервере в виде multipart/form-data, используйте что-то вроде этого:

Клиент может отправить данные, например, FileFormPost.

Специализированные модули

Класс *TFPWebModule* (используемый ниже) — это простой пример веб-модуля, который можно использовать для всех типов HTTP-запросов.

Однако fpweb поставляется с некоторыми специализированными модулями, которые имеют дополнительную поддержку специализированных задач:

  • класс TSimpleFileModule в модуле fpwebfile.pp может использоваться для загрузки файлов . Вы даете ему каталог, и он делает все остальное.
  • Класс TFPHTMLModule в модуле fphtml.pp может использоваться для создания HTML.
  • Класс TProxyWebModule в модуле fpwebproxy.pp — это готовый прокси-сервер.
  • Класс TFPWebProviderDataModule в модуле fpwebdata.pp предоставляет данные JSON, которые могут использовать хранилища ExtJS.
  • Класс TSQLDBRestModule в модуле sqldbrestmodule.pp реализует полный сервер REST, поддерживаемый SQLDB. Дополнительные сведения см. в разделе SQLDBRestBridge.
  • Класс TJSONRPCModule в модуле webjsonrpc.pp реализует службу JSON-RPC.
  • Класс TExtDirectModule в модуле fpextdirect.pp реализует вариант Ext.Direct Службы JSON-RPC.

Использование нескольких модулей

Если в веб-приложении есть только один модуль, все запросы будут направляться в этот модуль.

Вы можете использовать несколько модулей по мере роста вашего веб-приложения. Новый модуль можно добавить, выбрав «Файл — Новый», а затем либо «Веб-модуль», либо «Веб-модуль HTML».

FCL-Web использует URL-адрес, чтобы указать, как должен обрабатываться HTTP-запрос. Поэтому нужно знать, какие веб-модули существуют в приложении. Для этого каждый модуль должен быть зарегистрирован.

Каждый модуль регистрируется с помощью fcl-web в разделе инициализации модуля, в котором он определен:

Затем модуль будет вызываться, если вы используйте форму URL

, если есть несколько модулей, имя модуля должно появиться в URL-адресе; в противном случае произойдет ошибка.

Это поведение также можно применить для приложений, которые имеют только один модуль, установив для свойства AllowDefaultModule приложения значение false:

В этом случае приложение fcl-web будет всегда требуется имя модуля в URL-адресе.

Имя переменной запроса, определить имя модуля (по умолчанию «модуль») можно установить в свойстве Application.ModuleVariable. NextCode

гарантирует, что следующий URL-адрес перенаправляется на TMyModule:

Если всего этого недостаточно для определения модуля для передачи запроса, можно использовать событие Application.OnGetModule. Это тип TGetModuleEvent:

Создание обработчика событий для этого события позволяет точно контролировать модуль, созданный для обработки запроса: запрос (переданный в ARequest) может проверить, а в переменной ‘ModuleClass’ должен быть установлен класс модуля, который должен обрабатывать запрос.

Если ‘ModuleClass’ имеет значение ‘Nil’ после возврата, в браузер будет отправлено сообщение об ошибке.

Использование действий

Модуль можно использовать для группировки определенных типов действий, которые логически связаны. Рассмотрим TUserModule, который используется для управления пользователями на веб-сайте. С пользователем может быть связано несколько действий:

  • Создать
  • Удалить
  • Редактировать
  • Экран
Читайте также:  Как получить архивный тариф теле2

Эти разные действия могут выполняться одним и тем же модулем. Вы можете указать действие в URL-адресе вручную, например:

Это можно сделать автоматически. Действия имеют разные свойства:

Имя Имя действия. URL-адрес будет проверен, чтобы определить имя действия. строка содержимого. Если установлено, оно будет отправлено в браузер. Содержимое представляет собой список строк. Если установлено, оно будет отправлено в браузер. ContentProducer Если установлено, ContentProducer обрабатывает запрос. По умолчанию Если установлено значение True, это действие является действием по умолчанию. Это означает, что если FCL-Web не может определить имя действия, действие будет выполнено. Если установлен шаблон, этот шаблон будет обработан, а результаты отправлены в браузер.

Также есть некоторые события:

BeforeRequest выполняется до того, как запрос будет обработан. Может использоваться для установки «Содержимого» или других Характеристики. AfterRequest выполняется после обработки запроса. Обработчик события OnRequest для обработки запроса. Если установлено, для обработки запроса используется контроллер.

Опять же, как и в случае с несколькими модулями, чтобы определить, какое действие выполнять. Часть, следующая непосредственно за частью модуля (в данном примере «пользователь»), используется:

выполняет действие, называемое «удаление».

Свойство модуля «ActionVar» можно использовать для установки имя переменной запроса, которая будет использоваться. Конфигурация

может использоваться для изменения приведенного выше URL-адреса на

. Если в приложении есть только один модуль, URL-адрес можно сократить до

Использование шаблонов HTML

Информацию об использовании шаблонов, тегов шаблона и параметров тега шаблона для создания страницы ответа см. в файле fptemplate.txt в каталоге FPC по адресу /packages/fcl-base/texts/.

Пример проекты, демонстрирующие использование шаблонов, можно найти в каталоге FPC по адресу /packages/fcl-web/examples/fptemplate/ (подробнее см. README.txt). (В предыдущих выпусках эти примеры находились в каталоге Lazarus по адресу /components/fpweb/demo/fptemplate/)

Советы и устранение неполадок

Отправка кодов результатов

Отправка HTTP Ответ, отличный от 200 OK, используйте AResponse.Code и AResponse.CodeText , например

Отправка двоичных данных

Метод, который работает для отправка, например, файлов tiff с веб-сервера на клиент — изменено из $(fpcdirectory)\packages\fcl-web\examples\jsonrpc\demo1\wmdemo.pp — что-то например:

Ошибка: HTTP-модуль не может быть определен для запроса

может иметь несколько модулей и несколько действий. Если вы вводите URL-адрес только с одним элементом, например:

, тогда fpweb предполагает, что вы вводите действие. Если у вас не установлен модуль по умолчанию, вы получите внутреннюю ошибку сервера 500 (Невозможно определить модуль HTTP для запроса)

Вы можете изменить это поведение, чтобы fpweb отображал имя модуля, установив Свойство приложения PreferModuleName установлено в true.

Ошибка: код ответа 500 Внутренняя ошибка сервера при попытке обработать метод DELETE

В FPC 2.6.2 и более ранних версиях fcl-web не принимает метод DELETE и выдает ошибку.

fpWeb/FCGI и Apache 2.4 (режим mod_proxy_fcgi)

1, включите следующие модули: setenvif_module, proxy_module и proxy_fcgi_module
(в CentOS 7 модули определены в /etc/httpd/conf.modules.d/00-base.conf и /etc/httpd/conf.modules.d/00-proxy.conf). Если вы хотите развернуть приложение FCGI за прокси-сервером Apache 2.4+, вам потребуется переменная PATH_INFO в заголовках, отправляемых через сокет демона FCGI.

1. Включите следующие модули: setenvif_module, proxy_module и proxy_fcgi_module
(в CentOS 7 модули определены в /etc/httpd/conf.modules.d/00-base.conf и /etc/httpd/conf.modules.d/00 — proxy.conf).

2. Конфигурация обратного прокси для fpWeb/FCGI, прослушивающего порт 9000.
$1 = имя модуля
$2 = имя модуля действия

fpWeb/FCGI и nginx

fcl -web требует переменной PATH_INFO для правильной маршрутизации заголовков, отправленных из нгинкс. Для этого вам нужно разделить полный URL-адрес на имя приложения FastCGI и некоторую информацию о пути, используя команду конфигурации fastcgi_split_path_info . Оператор берет регулярное выражение и помещает второе совпадение в переменную конфигурации $fastcgi_path_info . Эта переменная может быть передана вашему приложению с помощью объявления fastcgi_param .

Source

Как создать многоуровневый файл HTML/HTML5 из ​​Delphi/C ++Builder/ Lazarus.

Перед программистом возникают вопросы «как сохранить из Delphi в HTML», «написать HTML 5 из Delphi» «сгенерировать HTML 5 из Lazarus» довольно часто.

Документ HTML написан на языке гипертекстовой разметки (HTML). Он используется для создания относительно простых, но красиво оформленных документов. Нет смысла говорить о HTML с нуля. Тут, правда, стоит остановиться на некоторых функциях — HTML может отличаться — с табличной и послойной версткой, из стандартов HTML 4 и HTML 5 (первые здесь рассматривать не буду, т.к. их уже нет).

HTML5 позволяет веб-сайтам хранить данные локально в браузерах пользователей, позволяя им отказаться от получения файлов cookie HTTP. Контент доставляется быстрее и безопаснее. HTML5 также упростил процесс использования в разных браузерах. Добавлена ​​поддержка векторной графики без сторонних программ, таких как Silverlight или Flash.

Читайте также:  Как открыть строительную фирму с сро

Какие есть варианты генерации HTML из Delphi или Lazarus?

а) Если вам нужно отобразить одну страницу один раз и форматирование не то очень важно, то лучше всего использовать теги из кода, если у вас в голове уже есть хотя бы полная модель готового HTML. — тем не мение! Да хоть через writeln(.)! Его преимущество: вы можете мгновенно загрузить его на FTP, и вот он в Интернете, его откроет любой браузер. Но у него есть и недостатки: это не документ для печати (!), каждый браузер будет отображать его по-разному и даже один и тот же браузер с разным разрешением экрана. Но если ваше приложение работает с большим количеством данных, с большими документами, которые нужно сохранить для веб-формата, тогда возникают сложности:

б). специализированные библиотеки. Интересно, что их не так много. Это все, о чем вы можете думать сразу. Справедливости ради следует отметить, что delphihtmlcomponents имеет визуальный редактор и заявляет о полной совместимости с HTML 4.1 и CSS 3. Но HiDPI по-прежнему выглядит плохо.

Надеемся, что в версии 10.4 разработчик исправит эту раздражающую проблему, как и обещал.
В этом случае, конечно, вы сразу создаете HTML-документ в визуальном HTML-редакторе.

c) Сразу же сохраняете содержимое в HTML из Delphi с помощью FastReport VCL. Мы создаем документы любого типа и размера, многостраничные, разных размеров, мы можем сразу просмотреть документ, оценить его перед перегонкой в ​​HTML, а дополнительные объекты — это прилично штрих-коды, карты, изображения, графические примитивы (и мы можем! ) сохраните их в векторе!) Мы отладили: теперь вы можете отправлять их в многоуровневом формате HTML/HTML5! Приятный бонус: вы можете мгновенно загрузить его на FTP. Но помните: каждый браузер он будет отображать информацию иначе и даже с расширениями.

Различия между HTML и HTML5 при сохранении.

Да, чуть не забыл: какой тип HTML мне сделать из Delphi ? Табличный или многоуровневый? HTML или HTML5? Давайте подробнее рассмотрим конфигурацию каждого из них.

К этому моменту у нас уже должен быть создан проект со встроенным компонентом экспорта. Запустил, отобразил и сохранил в превью.

Теперь пора вызвать экспорт из браузера и выбрать нужный формат. (в конце каждой статьи есть код для самостоятельной реализации).

Вариантов экспорта более чем достаточно. Мы можем сохранить не только HTML-страницу, но и весь документ целиком. В него будут включены стили и сохранение других файлов в папку, браузер и многое-многое другое.

Одна из особенностей экспорта в том, что сам экспорт может содержать несколько файлов, графические изображения поддерживаются и каждое сохраняется в своем собственном файле, но внешний вид и размер файлов во многом зависят от шаблона сообщения.

Настройки для каждого формата показаны как

Инструменты FastReport помогут вам выбрать, какие страницы нашего документа вы хотите экспортировать, диапазон или определенные страницы.

Настройки сохранения включают:
Стили : стили экспорта, т.е. передача стиля. Конечно, деактивация ускорит процесс экспорта, но ухудшит внешний вид документа;
Все в одной папке : сохраняет все остальные файлы в той же папке, что и основной «index.html». сам файл;
Навигация по страницам : будет создан специальный браузер для более быстрой навигации по сайту;
Фиксированная ширина : блокирует автоматическое изменение ширины таблицы при изменении размера окна просмотра;
Многостраничный : При выборе этого режима каждая страница будет записываться в отдельный файл;
Фон : экспорт фоновых графических объектов, назначенных странице отчета.

Можно указать, куда мы хотим отправить файл — в память компьютера или в облако, на указанный адрес электронной почты FTP.

Не забудьте выбрать подходящий формат для сохранения графики компании и простых изображений в формате HTML, начиная с PNG и заканчивая WMF.

И..Открыть после экспорта — т. е. результирующий файл будет открыт сразу после экспорта браузером HTML по умолчанию в операционной системе.

Когда мы установили нужную нам конфигурацию, мы нажимаем нашу долгожданную кнопку «ОК», вот и все!

Вот мы и обсудили, как легко сохранить многоуровневый HTML/HTML5 из ​​Delphi.

Источник

Поделиться с друзьями
Решатор