Задание 6: Обработка ответа
В этом задании вы обработаете полученный ответ и сохраните его в текстовом файле. Затем сохраните куки в файл.
- Добавьте оператор using для включения библиотеки Progress.Json.ObjectModel.JsonObject в файл процедуры. Добавьте следующий код в файл процедуры в блоке Definitions:
using Progress.Json.ObjectModel.JsonObject.
- Добавьте код, чтобы проверить, является ли код состояния 200 или нет. Если код состояния не 200, выведите сообщение об ошибке. Иначе, приведите ответ к формату JSON и распечатайте его в текстовый файл test.json.
Добавьте следующий код в файл процедуры в главном блоке:
if oResponse:StatusCode <> 200 then
do:
message 'Request error: ' + string(oResponse:StatusCode) view-as alert-box.
return.
end.
else
cast(oResponse:Entity, JsonObject):WriteFile('test.json', true).
- Опишите переменную iNumCookies как целое число в блоке Preprocessor Definitions:
define variable iNumCookies as integer no-undo.
- Опишите переменную oCookies как экстент Cookie в блоке Preprocessor Definitions:
define variable oCookies as Cookie extent no-undo.
- Теперь вы добавите код для сохранения cookie в файл. Извлеките cookie из oResponse используя метод GetCookies (), и сохраните их в экстенте oCookies. Сохраните возвращённое значение в iNumCookies.
Добавьте следующий код в файл процедуры в главном блоке:
iNumCookies = oResponse:GetCookies(output oCookies).
- Добавьте код для сохранения значения iNumCookies и всех cookies из oCookies в файл.
Добавьте следующий код в файл процедуры в главном блоке:
output to cookies.txt. put iNumCookies. def var i as int no-undo. do i = 1 to iNumCookies: put unformatted string(oCookies[i]). put unformatted skip. end. output close.
- В итоге полный код вашего клиента должен выглядеть так:
/* *************************** Definitions ************************** */
using OpenEdge.Net.HTTP.*.
using OpenEdge.Net.URI.
using Progress.Json.ObjectModel.JsonObject.
block-level on error undo, throw.
/* ******************** Preprocessor Definitions ******************** */
define variable oClient as IHttpClient no-undo.
define variable oURI as URI no-undo.
define variable oCredentials as Credentials no-undo.
define variable oRequest as IHttpRequest no-undo.
define variable oResponse as IHttpResponse no-undo.
define variable iNumCookies as integer no-undo.
define variable oCookies as Cookie extent no-undo.
/* *************************** Main Block *************************** */
oClient = ClientBuilder:Build():KeepCookies(CookieJarBuilder:Build():CookieJar):Client.
oURI = new URI('http','localhost',8810).
oURI:Path = '/oemanager/applications/oepas1/properties/'.
oCredentials = new Credentials('Tomcat Manager Application','tomcat', 'tomcat').
oRequest = RequestBuilder:Build('GET', oURI)
:usingBasicAuthentication(oCredentials)
:Request.
oResponse = ResponseBuilder:Build():Response.
oClient:Execute(oRequest, oResponse).
if oResponse:StatusCode <> 200 then
do:
message 'Request error: ' + string(oResponse:StatusCode) view-as alert-box.
return.
end.
else
cast(oResponse:Entity, JsonObject):WriteFile('test.json', true).
iNumCookies = oResponse:GetCookies(output oCookies).
output to cookies.txt.
put iNumCookies.
def var i as int no-undo.
do i = 1 to iNumCookies:
put unformatted string(oCookies[i]).
put unformatted skip.
end.
output close.
message "Run completed!" view-as alert-box.
- Сохраните изменения.
