Задание 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.
- Сохраните изменения.