Сложный случай (большой объём данных переменных)

Чтобы избежать проблемной ситуации, описанной в предыдущем разделе, используйте более сложный, но очень надёжный способ обработки больших объёмов данных HTTP-переменных.

Событие on_sock_postdata возникает, когда в буфере VAR есть данные. В этом смысле оно похоже на событие on_sock_data_arrival, которое возникает, когда в буфере приёма сокета есть данные. Но в отличие от on_sock_data_arrival, событие on_sock_postdata впервые возникает только после того, как буфер VAR заполнится. То есть это событие вас не побеспокоит, пока без него обработка HTTP-запроса просто не может продолжаться.

Итак, у вас есть возможность получить доступ к данным HTTP-переменных и обработать их по мере поступления, ещё до начала этапа ответа. Метод sock.gethttprqstring, в отличие от свойства только чтение sock.httprqstring, действительно удаляет данные из буфера VAR и тем самым освобождает в нём место. Процесс показан на схеме ниже:

Схема, иллюстрирующая использование события on_sock_postdata.

Вот изменённый пример входа в систему:

В обработчике события on_sock_postdata мы извлекаем доступные данные HTTP-переменных и обрабатываем их. Событие будет вызываться столько раз, сколько потребуется. Например, данные можно сохранять в файл:

Sub On_sock_postdata()
   fd.setdata(sock.gethttprqstring(255)) 'very simplified, but illustrates the point
End Sub

Затем в HTML-файле нужно помнить, что к этому моменту часть данных HTTP-переменных может быть ещё не обработана:

<html><body>
   <?
      While sock.httprqstring<>"" 'extract the remaining part of the variable data
         fd.setdata(sock.gethttprqstring(255))
      Wend
   ?>
</body></html>

Вряд ли вход пользователя в систему потребует такой аккуратной обработки. Имя пользователя и пароль легко уместятся в 255 байт, если только ваши пользователи не параноики с гигантскими паролями. И всё же есть много ситуаций, когда нужно передать большой объём данных переменных. Например, методы HTTP POST регулярно используются для загрузки файлов на веб-сервер, и ваше устройство сможет справиться и с этим.

Исходный материал Tibbo обновлён 11 августа 2022Оригинал на docs.tibbo.com · Сообщить об ошибке