Метод Response.Redirect
Response.Redirect URL (URL - универсальный описатель ресурсов)
Параметры:
- URL
- Параметр является универсальным описателем ресурса. Он показывает, када необходимо переадресовать браузер.
Замечание:
Любое вхождение данного метода между тагами
и web-страницы будет проигнорирован. Данный метод может использоваться только в заголовке HTML-страницы. Данный метод передаст заголовок (header) браузеру, если пропущен параметр URL данного объекта в следующем виде:HTTP/1.0 302 Object Moved
Location URL
Метод Response.End
Response.End
Замечание:
Если свойство Response.Buffer был установлен в TRUE (истина), то вызывая метод Response.End будет производить очистку буфера, выталкивая данные из него клиенту. Если вы не хотите выводить данные пользователю, вы должны вызвать следующий метод:
<%
Response.Clear
Response.End
%>
Метод Response.AddHeader
Метод AddHeader добавляет HTML-заголовок с определенными значениями. Этот метод всегда добавляет новый заголовок к ответу клиентскому браузеру. Данный метод не заменяет существующий заголовок новым. Добавленный заголовок не может быть удален.
Данный метод применяется только для "продвинутых" задач.
Response.AddHeader имя_переменной, значение
Параметры:
- имя_переменной
- Название нового параметры HTML-заголовка.
- значение
- Устанавливаемое значение, которое будет запомнено в заголовке.
Замечания:
Для корректной работы метода, имя_переменной не должно содержать символа подчеркивания (_). Набор ServerVariables интерпретирует символ подчеркивания как тире в заголовке. Для примера следующий скрипт принуждает сервер найти параметр из HTML-заголовака, называющийся MY-HEADER.
<% Requset.ServerVariables("HTTP_MY_HEADER") %>
Так как HTTP протокол требует, чтобы все параметры заголовка были переданы до начала тела HTML-страницы, то вы должны вызывать метод AddHeader в вашем скрипте до того, как начнется описание
.... Имеется одно исключение. Если значение свойства Buffer установлено в истину (true), тогда вы можете писать AddHeader в любой точке скрипта, но до первого вызова метода Flush. В противном случае вызод метода AddHeader вызовет ошибку.Следующие два.ASP-файла демонстрируют последнее замечание.
<% Response.AddHeader "Внимание!", "Текст сообщения об ошибке"%>
ваш текст на страничке
В данном примере страница не буферируется. Скрипт работает однако AddHeader вызывается перед тем, как сервер будет производить вывод в HTML клиенту.
<% Response.Buffer = true %>
здесь идет некоторая информация вашей странички...
<%Response.AddHeader "Внимание!", "сообщение об ошибке"%>
<%Response.Flush%>
<%Response.Write("некий текст")%>
Во втором примере страница буферируется и как ресультат сервер не выдает текст клиенту до тех пор, пока не кончится сам скрипт или пока не встретится метод Flush. Вы можете использовать данный метод для того, чтобы отослать несколько копий некоторого параметра заголовка с различными значениями, как с заголовком WWW-Authenticate.
Метод Response.AppendToLog
Метод AppendToLog добавляет строку в конец файла отчета (log-file) web-сервера. Вы можете вызывать этот метод столько раз, сколько вам необходимо. Каждый раз при вызове метода в файл отчета сервера будет записана указанная вами строка.
Response.AppendToLog значение
Параметры:
- значение
- Текст, который будет добавлен к фалу отчета web-сервера. Данная строка не может содержать символ запятой (,). Причем общая длина добавляемой строки не должна превышать 80 символов.
Замечания:
Для использования данной возможности вам необходимо, чтобы опция URI Query была разрешена на панели "расширенных свойств ведения log-файла" для данного web-сервера в IIS.
Метод Response.BinaryWrite
Метод BinaryWrite позволяет записывать указанную информацию в текущий HTTP-вывод без какого-либо преобразования символов. Этот метод удобен для вывода нестроковой информации, такой как двоичные данные, требуемые каким-либо приложением.
Response.BinaryWrite данные
Параметры:
- данные
- Данные, предназначенные для HTTP-вывода.
Если у вас есть объект, порождающий байтовый массив, вы можете использовать следующий вызов данного метода для передачи этого массива какому-либо приложению, запущенному на клиентской машине.
<% Set BinGen = Server.CreateObject(My.BinaryGenerator)
Pict = BinGen.MakePicture
Response.BinaryWrite Pict
%>
Метод Response.Clear
Метод Clear стирает всю забуферированный HTML-вывод. Однако данный метод не стирает информаицю из буфера, связанную с заголовком. Вы можете использовать данный метод для управления ошибками. Однако выполнение данного метода будет приводить к ошибке если свойство Response.Buffer не истина (true).
Свойство Response.CacheControl
Данное свойство предъизменяет установленное по умолчанию значение. Когда вы устанавливаете свойство в значение Public, то Proxy-сервер может кэшировать вывод, генерируемый ASP-ом.
Response.CacheControl [= cache control header]
Параметры:
- Cache control header
- Этот параметр управления заголовком может быть либо Public либо Private.
Свойство Response.CharSet
Свойство CharSet позволяет добавлять название кодовой таблицы символов (к примеру, WINDOWS-1251) в HTML заголовок, строку content-type (тип содержимого).
Response.CharSet имя_кодовой_таблицы
Параметры:
- имя_кодовой_таблицы
- Строка, которая указывает кодовую таблицу для данной HTML-страницы. Наименование данной кодовой таблицы будет добавлено в заголовок HTML-файла под параметром "content-type".
Для ASP-страницы, для которой не использовано свойство Response.Charset параметр "content-type" в заголовке будет следующим:
Content-type:text/html
Если же ASP-файл содержит компанду
<%Response.Charset("Windows-1251")%>
то в заголовке поле content-type будет иметь вид
Content-type:text/html; charset=Windows-1251
Замечание:
Данная функция вставляет любую строку в заголовок и не проверяет ее правильность.
Если страничка содержит несколько тагов Response.Charset, то каждый последующий будет заменять значение на свое собственное.
Свойство Response.ContentType
Свойство ContentType позволяет указывать вид (тип) содержимого HTML-файла. Если данное свойство не использовано, то по умолчанию принимается text/html.
Response.ContentType [=тип_содержимого]
Параметры:
- тип_содержимого
- Строка, описывающая тип содержимого HTML. Эта строка обычно имеет вид "тип/подтип", где тип это основная категория содержимого и подтип - указывает тип содержимого. Для получения полного списка поддерживаемых типов - обратитесь к документации к браузеру или спецификации HHTP.
Следующий пример илюстрирует установку типа содержимого как Формат Определения Каналов (Push-каналы).
<% Response.ContentType = "application/x-cdf" %>
Второй пример демонстрирует установку свойства в наиболее общеизвестные значения.
<% Response.ContentType = "text/HTML" %>
<% Response.ContentType = "image/GIF" %>
<% Response.ContentType = "image/JPEG" %>
Свойство Response.Expires
Свойство Expires указывает промежуток времени пока страница HTML закешированная браузером считается не утратившей силу (срок хранения). Если пользователь запрашивает закешированную страницу у браузера, у которой не вышел срок "хранения", то браузер возвращает ее прямо из своего кэша.
Response.Expires [=число]
Параметры:
- число
- Количество времени в минутах перед тем, как страница будет считаться "просроченной". Установка этого значения в 0 заставляет данную страницу становится "просроченной" незамедлительно.
Замечание:
Если данное свойство установлено более чем один раз на странице, то используется самое маленькое значение.
Свойство Response.ExpiresAbsolute
Свойство ExpiresAbsolute указывает время и дату, после которого страница HTML закешированная браузером считается утратившей силу (вышел срок хранения). Если пользователь запрашивает закешированную страницу у браузера, у которой не вышел срок "хранения", то браузер возвращает ее прямо из своего кэша. Если время указано (а дата указана), то "срок хранения" данной страницы истекает в полночь этого дня. Если ни время ни дата не указаны, то значение присваивается в соответствии с днем и временем, когда был запущен скрипт.
Response.ExpiresAbsolute [= [дата] [время]]
Параметры:
- дата
- Указывает на дату истечения "срока хранения". Формат даты должен соответствовать стандврту RFC-1123.
- время
- Указывает на время, когда у страницы истекает "срок хранения". Данное значение переводится в формат GMT (время по Гринвичу) перед тем, как заголовок будет передан клиенту.
Замечание:
Если данное свойство определяется более одного раза на странице, то момент истечения "срока хранения" принимается самым скорым из всех указанных значений.
<% Response.ExpiresAbsolute = #May 31,1998 13:30:15# %>
Свойство Response.IsClientConnected
Данное свойство является значение только для чтения, то есть этому свойству нельзя присваивать никаких значений. Это свойство указывает на то, подключен ли клиент или уже не подключен к серверу, определенное в последнем из Response.Write.
Response.IsClientConnected ()
Замечание:
Это свойство позволяет вам определять моменты, когда пользователь подключен, и когда отключен от сервера. К примеру, длина периода времени между тем когда сервер ответил и когда клиент сделал запрос дает уверенность в том, что клиент еще подключен и есть смысл продолжить выполнение скрипта.
<%
"посмотрим, подключен ли пользователь
If Not Response.IsClientConnected Then
"получаем номер сессии и закрываем сессию
Shutdownid = Session.SessionID
"подготовка к закрытию сессии
Shutdown(Shutdownid)
End If
%>
Свойство Response.Pics
Данное свойство позволяет добавить значение поля pics-label в заголовок ответа.
Response.PICS (PICSLabel)
Параметры
- PicsLabel
- Строка, которая преобразована в формат PICS - метку. Значение указанное в этом параметре добавляется в заголовок ответа в поле PICS.
Для ASP-файла включающего:
<% Response.PICS("(PICS-1.1
labels on " & chr(34) & "1997.01.05T08:15-0500" until "1999.12.31T23:59-0000"
ratings (v 0 s 010 n 0))%>
Следующий заголовок будет сформирован
PICS-label:(PICS-1.1 labels
on "1997.01.05T08:15-0500" until "1999.12.31.T23:59-0000" rating (v 0 s 0 1 0 n 0))
Замечание:
Это свойство позволяет вам вставлять любые строки в заголовок, независимо от корректности строк.
Если страничка содержит множество тагов содержащих Response.PICS, то каждая последующая будет заменять значение предыдущей.
Свойство Response.Status
Данное свойство позволяет указывать строку состояния, возвращаемую сервером. Значения статуса определены в спецификации HTTP.
Response.Status = описание_состояния
Параметры
- описание_состояния
- Строка, которая содержит и трех цифровой номер, который указывает код статуса и также краткое описание данного кода. К примеру, 310 Move Permanently.
Следующий пример показывает установку статуса:
<% Response.Status = "401 Unauthorized" %>
Замечание:
Используйте это свойство чтобы модифицировать строку, возвращаемую сервером.
Допустим, нам нужно получить данные с сайта, сбор которых вручную нецелесообразен или невозможен из-за объёма.
В таком случае мы можем автоматизировать процесс, используя инструменты, описанные далее.
Библиотека 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})
This article gives a summary of the responses that an organisation or project can take to manage a risk. Risk can be defined as uncertainty of outcome whether positive (an opportunity) or negative (a threat).
The managment of risk is critical to project success and it is the task of risk management to manage a project’s exposure to risk ().The response(s) to a given risk should reflect the risk type, the risk assessment (likelihood, impact, criticality) and the organisation’s attitude to risk. There are a number of possible responses to risks and as risks can be threats or opportunities these include responses that are suitable for potential opportunities . The responses are summarised in the table below.
Table of risk responses
Risk Response
|
Description/example
|
Suitable for…. risk types (these are suggestions and not exhaustive)
|
Threats
|
Avoid
|
The risk is avoided by changing the project in someway to bypass the risk.
|
Some political risks e.g. adverse public opinion. Some technical/operational/infrastructure risks e.g. maintenance problems. Legal and regulatory risks e.g. regulatory controls, licensing requirements.
|
Transfer
|
|
Some strategic/commercial risks e.g. theft, insolvency can be insured against. See business risks for more examples.
|
Reduce
|
Action is taken to reduce either the likelihood of the risk occurring or the impact that it will have.
|
The most frequently used response to risk.
Widely applicable - Technical/Operational/Infrastructure e.g. negligence, performance failure, scope ‘creep’, unclear expectations.
Organisational/management/human factors e.g. personality clashes, poor leadership, and poor staff selection.
|
|
|
Some political, legal and regulatory, and economic/financial risks may need to be accepted with a in place e.g. war and disorder, exchange rate fluctuation.
|
Contingency
|
Here a plan is put in place to respond if the risk is realised.
|
Economic/financial/market
Political
Legal and regulatory Arguably all risks can and should have a contingency plan in place.
|
Opportunities
|
Share
|
An opportunity is shared with a partner or supplier to maximise the benefits through use of shared resource/technology etc.
|
Technical/operational/infrastructure e.g. new technology, improved designs.
|
Exploit
|
A project could be adjusted to take advantage of a change in technology or a new market.
|
Economic/financial/market e.g. new and emerging markets, positive changes in exchange rates or interest rates.
|
Enhance
|
Action is taken to increase the likelihood of the opportunity occurring or the positive impact it could have.
|
Strategic/commercial opportunities such as new partnerships, new capital investment, new promoters.
|
Reject
|
Here no action is taken and the chance to gain from the opportunity is rejected. may be put in place should the opportunity occur.
|
Political or environmental e.g. new transport links, change of government bringing positive changes in policy/opportunities for lobbying etc.
|
Contingency plans
should identify the actions that will be taken if a risk occurs. Contingent actions will often have an associated cost and a budget should be set aside in the business case to cover this. The Top 50 Business Risks and how to manage them!
20 Common Project Risks - example Risk Register
Checklist of 30 Construction Risks
Risk Responses - references
Office of Government Commerce (2002), Managing Successful Projects with PRINCE2, London: TSO.The Projects Group PLC, 2006, Risk Management Overview, Sutton: The Projects Group plc.
After receiving and interpreting a request message, a server responds with an HTTP response message:
- A Status-line
- Zero or more header (General|Response|Entity) fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF)
indicating the end of the header fields
- Optionally a message-body
The following sections explain each of the entities used in an HTTP response message.
Message Status-Line
A Status-Line consists of the protocol version followed by a numeric status code and its associated textual phrase. The elements are separated by space SP characters.
Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
HTTP Version
A server supporting HTTP version 1.1 will return the following version information:
HTTP-Version = HTTP/1.1
Status Code
The Status-Code element is a 3-digit integer where first digit of the Status-Code defines the class of response and the last two digits do not have any categorization role. There are 5 values for the first digit:
S.N.
|
Code and Description
|
---|
1
|
1xx: Informational
It means the request was received and the process is continuing.
|
2
|
2xx: Success
It means the action was successfully received, understood, and accepted.
|
3
|
3xx: Redirection
It means further action must be taken in order to complete the request.
|
4
|
4xx: Client Error
It means the request contains incorrect syntax or cannot be fulfilled.
|
5
|
5xx: Server Error
It means the server failed to fulfill an apparently valid request.
|
HTTP status codes are extensible and HTTP applications are not required to understand the meaning of all registered status codes. A list of all the status codes has been given in a separate chapter for your reference.
Response Header Fields
We will study General-header and Entity-header in a separate chapter when we will learn HTTP header fields. For now, let"s check what Response header fields are.
The response-header fields allow the server to pass additional information about the response which cannot be placed in the Status- Line. These header fields give information about the server and about further access to the resource identified by the Request-URI.
-
Proxy-Authenticate
-
WWW-Authenticate
You can introduce your custom fields in case you are going to write your own custom Web Client and Server.
Examples of Response Message
Now let"s put it all together to form an HTTP response for a request to fetch the hello.htm
page from the web server running on сайт
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed
Hello, World!
The following example shows an HTTP response message displaying error condition when the web server could not find the requested page:
HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset=iso-8859-1
404 Not Found
Not Found
The requested URL /t.html was not found on this server.
Following is an example of HTTP response message showing error condition when the web server encountered a wrong HTTP version in the given HTTP request:
HTTP/1.1 400 Bad Request
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Content-Type: text/html; charset=iso-8859-1
Connection: Closed
400 Bad Request
Bad Request
Your browser sent a request that this server could not understand.
The request line contained invalid characters following the protocol string.
Поделиться в социальных сетях: