Описание объекта Response. Сумасшедшие формы Примеры слабой защиты
Для получения экземпляра этого класса используйте вызов метода wa()->getResponse() , например:
Wa()->getResponse()->getHeader("Content-type")
Методы
public function addCss ($url, $app_id = false )
Добавляет URL в список CSS-файлов. Все добавленные URL CSS-файлов могут быть получены в шаблоне Smarty с помощью метода {$wa->css()} .
Параметры
- $url
Относительный URL CSS-файла. Если указано значение параметра $app_id , то следует указать URL файла относительно URL директории с файлами соответствующего приложения. В противном случае относительный URL следует указывать относительно директории установка фреймворка.
- $app_id
Идентификатор приложения.
Пример
wa()->getResponse()->addCss("css/myapp.css", "myapp");public function addGoogleAnalytics ($str )
Добавляет фрагмент JavaScript-кода для Google Analytics. Код Google Analytics (включая добавленный данным методом) подключается в HTML-шаблоне сайта с помощью метода {$wa->headJs()} .
Параметры
- $str
Фрагмент JavaScript-кода.
public function addHeader ($name, $value, $replace = true )
Добавляет заголовок, который будет отправлен сервером в ответ на запрос пользователя. Все добавленные таким способом заголовки, будут отправлены пользователю при выполнении метода .
Параметры
- $name
Наименование заголовка.
- $value
Значение заголовка.
- $replace
Флаг, обозначающий необходимость заменить ранее установленное значение для указанного заголовка.
Пример
wa()->getResponse()->addHeader("Content-type", "application/json");public function addJs ($url, $app_id = false )
Добавляет URL в список JavaScript-файлов. Все добавленные URL JavaScript-файлов могут быть получены в шаблоне Smarty с помощью метода {$wa->js()} .
Параметры
- $url
URL файла с JavaScript-кодом. Если указано значение параметра $app_id , то следует указать URL файла относительно URL директории с файлами соответствующего приложения. В противном случае относительный URL следует указывать относительно директории установка фреймворка.
- $app_id
Идентификатор приложения.
Пример
wa()->getResponse()->addJs("js/myapp.js", "myapp");public function getCss ($html = true, $strict = false )
Возвращает список ранее добавленных ссылок CSS-файлов.
Параметры
- $html
Флаг, обозначающий необходимость вернуть HTML-код подключения CSS-файлов. Если указано false , метод возвращает массив URL таких файлов.
- $strict
Флаг, обозначающий использование XHTML-формата вместо HTML, когда для параметра $html указано значение true .
Пример
wa()->getResponse()->getCss();public function getHeader ($name = null )
Возвращает значение заголовка ответа.
Параметры
- $name
Идентификатор заголовка, значение которого необходимо вернуть. Если не указано, метод возвращает весь текущий массив заголовков.
Пример
wa()->getResponse()->addHeader("Content-type", "application/json"); wa()->getResponse()->getHeader("Content-type");Результат
application/jsonpublic function getJs ($html = true )
Возвращает список ссылок JavaScript-файлов ответа.
Параметры
- $html
Необязательный флаг, обозначающий необходимость вернуть HTML-код подключения JavaScript-файлов. В противном случае метод возвращает текущий массив URL файлов.
Пример
wa()->getResponse()->getJs();public function getMeta ($name = null )
Возвращает содержимое МЕТА-данных: заголовок страницы ("title"), МЕТА-теги keywords ("keywords"), description ("description").
Параметры
- $name
Идентификатор элемента МЕТА-данных, значение которого необходимо вернуть. Если не указан, метод возвращает весь текущий массив МЕТА-данных.
Пример
wa()->getResponse()->getMeta("keywords");public function getStatus ()
Возвращает ранее установленный статус ответа сервера.
Пример
wa()->getResponse()->setStatus(200); wa()->getResponse()->getStatus();Результат
200public function getTitle ()
Возвращает заголовок (TITLE) страницы.
Пример
wa()->getResponse()->setTitle("Мой интернет-магазин"); wa()->getResponse()->getTitle();Результат
Мой интернет-магазинpublic function redirect ($url, $code = null )
Выполняет перенаправление пользователя на указанный URL.
Параметры
- $url
URL, на который необходимо перенаправить пользоватвеля.
- $code
Код ответа сервера, которым должно сопровождаться перенаправлением.
Пример
wa()->getResponse()->redirect("http://otherdomain.ru/", 301);public function sendHeaders ()
Выполняет отправку ранее установленных заголовков.
Пример
wa()->getResponse()->addHeader("Content-type", "application/json"); wa()->getResponse()->sendHeaders();public function setCookie ($name, $value, $expire = null, $path = null, $domain = "", $secure = false, $http_only = false )
Устанавливает значение записи cookie с помощью PHP-функции setcookie .
Параметры
- $name
Идентификатор записи.
- $value
Значение записи.
- $expire
Время истечения срока действия.
- $path
Путь к «поддиректории» URI, в пределах которого действует значение записи.
- $domain
Доменное имя, для которого действиет значение записи.
- $secure
Флаг, обозначающий доступность записи только в случае передачи значения по протоколу HTTPS.
- $http_only
Флаг, обозначающий доступность значения записи только через протокол HTTP и недоступность средствами клиентских скриптов (JavaScript).
Пример
wa()->getResponse()->setCookie("code", $code, time() + 30 * 86400, null, "", false, true);public function setMeta ($name, $value = null )
Устанавливает значение МЕТА-данных. Это значение доступно в шаблонах Smarty с помощью метода {$wa->meta()} .
Параметры
- $name
Идентификатор элемента МЕТА-данных: заголовок страницы ("title"), МЕТА-теги keywords ("keywords") и description ("description").
- $value
Значение элемента.
Пример
wa()->getResponse()->setMeta("keywords", $keywords);public function setStatus ($code )
Устанавливает статус ответа сервера.
Параметры
- $code
Код статуса
Пример
wa()->getResponse()->setStatus(404);public function setTitle ($title )
Устанавливает заголовок (TITLE) страницы. Содержимое заголовка доступно в шаблонах Smarty с помощью метода {$wa->title()} .
Описываемый объект является очень полезным и мощным инструментом. Данный объект имеет несколько методов, их описание приводится ниже:
Коллекции:
Методы:
Свойства:
Коллекция Response.Cookies
Коллекция Cookies устанавливает значения для cookies. Если указанные cookies не существуют, то создает их. Если cookie существует, то принимает новое значение, а старое уничтожается.
Response.Cookies(cookie) [(ключ) | . аттрибуты ] = значение
Параметры:
- cookie - Имя cookie
- ключ - Необязательный параметр. Если он указан, то cookie - это справочник (вложенный) и ключ - это множество значений.
- аттрибуты - Указанная информация о самих cookie. Данный параметр может быть один из следующих:
- значение - Указывает значение, которое необходимо присвоить данному ключу или атрибуту.
Название | Описание |
Domain | Только запись. Если указан, то cookie передаются только по запросу из этого домена. |
Expires | Только запись. Дата, когда у cookie истекает срок действия. Эта дата должна быть установлена для того, чтобы cookie записались на клиентский жесткий диск после окончания сессии. Если этот атрибут не установлен, то дата окончания срока действия cookie принимается текущей датой. Cookie прекратят срок действия сразу же по окончании сессии. |
HasKey | Только чтение. Указывает на то, содержит ли cookie данный ключ. |
Path | Только запись. Если указан, то cookie передаются только по запросу с этого пути. Если параметр не установлен, то используется путь к приложению. |
Secure | Только запись. Указывает на то, защищены ли будут cookie или нет. |
Замечание:
Если cookie с ключем созданы так, как показано в следующем скрипте,
<% Response.Cookies("mycookie")("type1") = "сахар" Response.Cookies("mycookie")("type2") = "печенье" %>
то следующий заголовок будет послан:
Set-Cookie:MYCOOKIE=TYPE1=сахар&TYPE2=печенье
Если же присвоить mycookie значение без использования ключей, то это действие разрушит type1 и type2 - ключи. К примеру: <% Response.Cookies("myCookie") = "шоколадный зефир" %>
В предыдущем примере ключи type1 и type2 будут разрушены и их значения потерены. Mycookie будет теперь содержать в себе значение шоколадный зефир.
Вы также можете проверить существование конкретного ключа следующим способом:
<% = Response.Cookies("myCookie").HasKeys %>
Если будет выведено TRUE, значить такой ключ существует, в случае FALSE - нет.
Метод Response.Write
Response.Write переменная_или_значение
Параметры:
- переменная_или_значение - Данные для вывода на экран браузера через HTML. Этот параметр может быть любого типа, поддерживаемого VisualBasic Scripting Edition. То есть данные могут быть типов: дата, строка, символ, числовые значения. Значение данного параметра не может содержать комбинации %>. Вместо нее можно использовать равнозначную комбинацию %\>. Web-сервер будет преобразовывать эту последовательность в требуемую, когда скрипт будет выполнен.
Следующий пример показывает как работает метод Response.write для вывода сообщения клиенту.
Я просто скажу вам: <%Response.write "Привет всем!!!"%> А ваше имя <%Response.write(Request.Form("name"))%>
Следующий пример добавляет HTML-таг на web-страничку. Так как данный метод не может содержать комбинацию %>, то мы используем последовательность %\>. Итак пример скрипта:
<% Response.write "
Тип | Описание | Вспомогательные методы класса Controller |
---|---|---|
ViewResult | Визуализирует указанный или стандартный шаблон представления |
View() |
PartialViewResult | Визуализирует указанный или стандартный шаблон частичного представления |
PartialView() |
RedirectToRouteResult | Выдает перенаправление HTTP 301 или 302 на метод действия или указанную запись маршрута, генерируя URL согласно конфигурации маршрутизации |
RedirectToAction()
RedirectToActionPermanent() RedirectToRoute() RedirectToRoutePermanent() |
RedirectResult | Выдает перенаправление HTTP 301 или 302 на заданный URL |
Redirect()
RedirectPermanent() |
ContentResult | Возвращает браузеру неформатированные текстовые данные, дополнительно устанавливая заголовок content-type |
Content() |
FileResult | Передает двоичные данные (такие как файл на диске или байтовый массив в памяти) напрямую в браузер |
File() |
JsonResult | Сериализирует объект.NET в формат JSON и отправляет его в качестве ответа. Ответы подобного вида более часто генерируются при использовании средств Web API и AJAX |
Json() |
JavaScriptResult | Отправляет фрагмент исходного кода JavaScript, который должен быть выполнен браузером |
JavaScript() |
HttpUnauthorizedResult | Устанавливает код состояния ответа HTTP в 401 (означает "не авторизован"), который заставляет действующий механизм аутентификации (аутентификация с помощью форм или аутентификация Windows) предложить посетителю войти |
Нет |
HttpNotFoundResult | Возвращает ошибку HTTP с кодом 404 - Not found (не найдено) |
HttpNotFound() |
HttpStatusCodeResult | Возвращает указанный код HTTP |
Нет |
EmptyResult | Ничего не делает |
Нет |
Все эти типы являются производными от класса ActionResult, и многие из них имеют удобные вспомогательные методы в классе Controller. Мы продемонстрируем использование этих типов результатов в последующих статьях.
Допустим, нам нужно получить данные с сайта, сбор которых вручную нецелесообразен или невозможен из-за объёма. В таком случае мы можем автоматизировать процесс, используя инструменты, описанные далее.
Библиотека requests
Python-библиотека для выполнения запросов к серверу и обработки ответов. Фундамент скрипта для парсинга и наше основное оружие. Пользуясь данной библиотекой мы получаем содержимое страницы в виде html для дальнейшего парсинга.
import requests response = requests . get ("https://ya.ru" ) # get-запрос print (response . text ) # вывод содержимого страницы payload = { "key1" : "value1" , "key2" : "value2" } response = requests . get ("http://httpbin.org/get" , params = payload ) # запрос с параметрами headers = { "user-agent" : "my-app/0.0.1" } response = requests . get (url , headers = headers ) # запрос с определенными html заголовками
API
Application programming interface - программный интерфейс приложения, предоставляемый владельцем веб-приложения для других разработчиков. Отсутствие API, способного удовлетворить наши нужды - первое в чем стоит убедиться прежде чем бросаться анализировать исходный код страницы и писать для нее парсер. Множество популярных сайтов имеет собственное api и документацию, которая объясняет как им пользоваться. Мы можем использовать api таким образом - формируем http-запрос согласно документации, и получаем ответ при помощи requests.
BS4
Beautifulsoup4 - это библиотека для парсинга html и xml документов. Позволяет получить доступ напрямую к содержимому любых тегов в html.
from bs4 import BeautifulSoup soup = BeautifulSoup (raw_html , "html.parser" ) print (soup . find ("p" , class_ = "some-class" ) . text ) # вывод содержимого тэга "p" классом "some-class"
Selenium Web Driver
Данные на сайте могут генерироваться динамически при помощи javascript. В таком случае спарсить эти данные силами requests+bs4 не удастся. Дело в том, что bs4 парсит исходный код страницы, не исполняя js. Для исполнения js кода и получения страницы, идентичной той, которую мы видим в браузере, можно использовать selenium web driver - это набор драйверов для различных браузеров, снабжающийся библиотеками для работы с этими драйверами.
А что делать, если там авторизация?
session = requests.Session() data = {"login_username":"login", "login_password":"password"} url = "http://site.com/login.php" response = session.post(url, data=data)
А что, если сайт банит за много запросов?
- Установить задержку между запросами:
response = requests.get(url, timeout=(10, 0.01)) # таймаут на соединения, таймаут на чтение (в секундах)
- Притвориться браузером, используя selenium web driver или передав содержимое заголовка user-agent, формируя запрос:
user_agent = ("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) " "Gecko/20100101 Firefox/50.0") request = requests.get(url, headers={"User-Agent":user_agent})
- Использовать прокси: