Как проверить веб сервис в браузере
Этичный хакинг и тестирование на проникновение, информационная безопасность
Современные веб-сайты становятся всё сложнее, используют всё больше библиотек и веб технологий. Для целей отладки разработчиками сложных веб-сайтов и веб-приложений потребовались новые инструменты. Ими стали «Инструменты разработчика» интегрированные в сами веб-браузеры:
- Chrome DevTools
- Firefox Developer Tools
Они по умолчанию поставляются с браузерами (Chrome и Firefox) и предоставляют много возможностей по оценке и отладке сайтов для самых разных условий. К примеру, можно открыть сайт или запустить веб-приложение как будто бы оно работает на мобильном устройстве, или симулировать лаги мобильных сетей, или запустить сценарий ухода приложения в офлайн, можно сделать скриншот всего сайта, даже для больших страниц, требующих прокрутки и т.д. На самом деле, Инструменты разработчика требуют глубокого изучения, чтобы по-настоящему понять всю их мощь.
В предыдущих статьях я уже рассматривал несколько практических примеров использования инструментов DevTools в браузере:
Эта небольшая заметка посвящена анализу POST запросов. Мы научимся просматривать отправленные методом POST данные прямо в самом веб-браузере. Научимся получать их в исходном («сыром») виде, а также в виде значений переменных.
По фрагменту исходного кода страницы видно, что данные из формы передаются методом POST, причём используется конструкция onChange="this.form.submit();":
Как увидеть данные, переданные методом POST, в Google Chrome
Итак, открываем (или обновляем, если она уже открыта) страницу, от которой мы хотим узнать передаваемые POST данные. Теперь открываем инструменты разработчика (в предыдущих статьях я писал, как это делать разными способами, например, я просто нажимаю F12):
Теперь отправляем данные с помощью формы.
Переходим во вкладку «Network» (сеть), кликаем на иконку «Filter» (фильтр) и в качестве значения фильтра введите method:POST:
Как видно на предыдущем скриншоте, был сделан один запрос методом POST, кликаем на него:
- Header — заголовки (именно здесь содержаться отправленные данные)
- Preview — просмотр того, что мы получили после рендеренга (это же самое показано на странице сайта)
- Response — ответ (то, что сайт прислал в ответ на наш запрос)
- Cookies — кукиз
- Timing — сколько времени занял запрос и ответ
Поскольку нам нужно увидеть отправленные методом POST данные, то нас интересует столбец Header.
Там есть разные полезные данные, например:
- Request URL — адрес, куда отправлена информация из формы
- Form Data — отправленные значения
Пролистываем до Form Data:
Там мы видим пять отправленных переменных и из значения.
Если нажать «view source», то отправленные данные будут показаны в виде строки:
Вид «view parsed» - это вид по умолчанию, в котором нам в удобном для восприятия человеком виде показаны переданные переменные и их значения.
Как увидеть данные, переданные методом POST, в Firefox
В Firefox всё происходит очень похожим образом.
Открываем или обновляем нужную нам страницу.
Открываем Developer Tools (F12).
Отправляем данные из формы.
Переходим во вкладку «Сеть» и в качестве фильтра вставляем method:POST:
Кликните на интересующий вас запрос и в правой части появится окно с дополнительной информацией о нём:
Переданные в форме значения вы увидите если откроете вкладку «Параметры»:
Другие фильтры инструментов разработчика
Для Chrome кроме уже рассмотренного method:POST доступны следующие фильтры:
- Проверка Accept Encoding
- Заголовок If-Modified-Since
- Выбор User Agent
- Проверка исходного кода
- Закладка для браузера
- Кириллические домены
- Поддержка gzip
- Циклические переадресации
- Отображение отправленных заголовков
- Версия для мобильных устройств
Используйте кнопку быстрого доступа к сервису Checkmy для мгновенной проверки кода ответа сервера нужной страницы сайта.
1. Перетащите кнопку Checkmy на панель закладок своего браузера.
2. Зайдите на страницу сайта, которую хотите проверить.
В новой вкладке браузера откроется результат проверки ответа сервера страницы на которой вы находитесь.
Проверка кода ответа сервера
- Доступность и коды состояний url адресов
- Поддержку кеширования страниц
- Сжатие контента на сервере
- Исходный код страницы
- Ответ сервера для разных User Agent
- Тип сервера, время и кодировку
- Корректность переадресаций
Список популярных заголовков ответа сервера с пояснением их значений.
Content-Type
Описание формата передаваемого контента. Необходимо для корректного распознавания браузером.
Accept-Encoding
Перечень способов кодирования содержимого ответа при передаче.
Дата генерации передаваемого контента, используется время отвечающего сервера.
Expires
Дата предполагаемого истечения срока актуальности контента.
Last-Modified
Дата последней модификации контента.
If-Modified-Since
Дата, когда необходимо загружать контент, если он изменился с указанного момента.
Location
URL-адрес по которому клиенту следует перейти или URL созданного ресурса.
Server
Список названий и версий веб-сервера и его компонентов с комментариями.
× Обратите внимание! Указаны только самые распространенные заголовки ответа сервера.200 Ok | Запрос клиента обработан успешно и ответ сервера содержит затребованные данные. |
201 Created | Этот код состояния используется в случае создания нового URI. Вместе с этим кодом результата сервер выдает заголовок Location, который содержит информацию о том, куда были помещены новые данные. |
202 Accepted | Запрос принят, но обрабатывается не сразу. В теле содержимого ответа сервера может быть дана дополнительная информация о данной транзакции. Гарантии того, что сервер в конечном итоге удовлетворит допустимым. |
203 Non-Authoritative Information | Информация в заголовке содержимого взята из локальной копии или у третьей стороны, а не с исходного сервера. |
204 No Content | Ответ содержит код состояния и заголовок, но тело содержимого отсутствует. При получении этого ответа браузер не должен обновлять свой документ. Обработчик чувствительных областей изображений может возвращать этот код, когда пользователь щелкает на бесполезных или пустых участках изображения. |
205 Reset Content | Браузер должен очистить форму, используемую в данной транзакции, для дополнительных входных данных. Полезен для CGI-приложений, требующих ввода данных. |
206 Partial Content | Сервер возвращает лишь часть данных затребованного объема. Используется в ответе на запрос с указанием заголовка Range. Сервер должен указать диапазон, включенный в ответ, в заголовке Content-Range. |
300 Multiple Choices | Запрошенный URI обозначает более одного ресурса, например, документ переведенный на несколько языков. В теле ответа сервера может находиться перечень конкретных данных о том, как выбрать ресурс правильно. |
301 Moved Permanently | Документ перемещен навсегда, новый адрес документа указывается в заголовке Location. Старый адрес больше не используется. |
302 Moved Temporarily | Документ перемещен временно, новый адрес документа указывается в заголовке Location. Сейчас нужно запросить документ по новому адресу, но в последствии документ будет доступен по старому адресу. |
303 See Other | Документ доступен также и по другому адресу, который указан в заголовке Location. |
304 Not Modified | Если при запросе используется заголовок lf-Modified-Since и документ не менялся с указанной даты, то сервер ответит данным кодом. Тело содержимого не посылается, и клиент должен использовать свою локальную копию. |
305 Use Proxy | Доступ к документу должен осуществляться через proxy-сервер, указанный в заголовке Location. |
400 Bad Request | В запросе клиента обнаружена синтаксическая ошибка. |
401 Unauthorized | Пользователь не имеет необходимых полномочий для доступа к документу и должен повторить запрос с предоставлением соответствующих полномочий. |
403 Forbidden | Запрос отклонен, так как доступ запрещен - сервер не может или не хочет ответить клиенту. |
404 Not Found | Документ не существует. |
405 Method Not Allowed | Метод, используемый клиентом, не поддерживается для данного документа. |
406 Not Acceptable | Документ существует, но формат документа не соответвует формату, в котором его запрашивает клиент. |
407 Proxy Authentication Required | Требуется инициация запроса от прокси-сервера. |
406 Not Acceptable | Документ существует, но формат документа не соответвует формату, в котором его запрашивает клиент. |
408 Request Time-out | Истекло время ожидания запроса от клиента и сервер прервал соединение. |
Проверьте ответы на популярные вопросы, возможно вы найдете ответ на свой вопрос.
Как проверить поддержку If-Modified-Since ?
Какой User Agent отправляется в запросе ?
По-умолчанию Checkmy использует User Agent пользователя, то есть ваш. Если вы хотите его изменить, то можете выбрать любой другой из соответствующего выпадающего списка.
Как узнать поддерживает ли сервер сжатие ?
Введите адрес страницы, которую хотите проверить и отметьте галку Accept-Encoding: gzip . Если ответ сервера будет содержать заголовок Content-Encoding: gzip , значит сжатие поддерживается.
Checkmy поддерживает домены на кириллице ?
Можно ли проверять страницы с несколькими редиректами ?
Да, Checkmy самостоятельно переходит по адресу редиректа и проверяет следующую страницу, указанную в поле <Location> . Вы можете проверить страницу на которой до 7 переадресаций, для каждой переадресации Checkmy покажет отправленные заголовки и полученные заголовки ответа сервера.
Есть ли мобильная версия сервиса ?
Что делает Checkmy
Всем хорошего времени суток. Давно не писал я, ибо решал задачи государственной важности и было не до мудрых нравоучений подрастающему поколению ))) Давайте рассмотрим, как создать сервис и дернуть его с помощью замечательного расширения для хрома "Бумеранг".
ВВЕДЕНИЕ
В последнее время я все чаще встречаюсь с ситуацией, когда клиенту требуется интеграция, и он хочет для этого создать веб-сервис в 1С. Я активно такие идеи у клиентов поддерживаю и взращиваю, соглашаясь с ними и выражая всеми своими выражениями здравость подобного подхода. При этом, конечно, понимая, что кроме меня не так много народу делают подобные штуки с легкостью врожденной непринужденности. Многие же миряне откровенно хиреют от подобных задач. Дабы переломить тенденцию и преодолеть их внутренние комплексы, я и пишу на данном сайте свои статьи.
ЧТО ЕСТЬ ВЕБ-СЕРВИС
Т.е. схема проста:
1. Программист 1С создает в 1С объект конфигурации Веб-сервис с нужным именем. Дальше в веб-сервисе создаются функции и определяются их параметры.
2. Администратор публикует веб-сервис из конфигуратора 1С на веб-сервере, после чего веб-сервер перезапускает.
4. Внешняя программа может вызвать функцию веб-сервиса, передав посредством запроса POST тело запроса функции с параметрами и получить в ответ результат функции, который оная функция в языке 1С возвращает с помощью команды "возврат мой_результат".
СВАЯЕМ ПРОСТОЙ СЕРВИС
Итак, для того, чтобы сваять примитивный сервис, мы можем создать новую конфигурацию и прсто добавить новый сервис. Допустим, назовем его TestWs. Дальше добавим к нему операцию с названием ОперацияTestWs, у которой укажем параметр "ПараметрTestWs" с типом Строка. Вообще, стоит отметить, что параметры веб-сервисов и возвращаемые ими значения описываются типами XDTO-пакетов. Параметр типа "строка" (по-умаолчанию) будет описан, как "string (http://www.w3.org/2001/XMLSchema)".
Собственно, у нас получилось что-то такое:
Сразу хочется предупредить: если Вы нажмете на пиктограмке "Открыть" в поле "Имя процедуры" до того, как создадите параметр, то функция создастся без параметров. И если Вы после этого параметр добавите, то автоматически он в функцию не попадет - придется или удалять функцию, очищать поле "Имя процедуры" и заново нажимать "Открыть", или вручную добавлять имя параметра в модуль функции.
Итак, вот мы создали сервис и функцию. Давайте теперь добавим простой код, возвращающий текущую дату и время:
Таким образом мы производим неявное приведение типа по первому аргументу к строке. Осталось опубликовать и дернуть.
ПУБЛИКАЦИЯ
Те, кто использует операционную систему виндовс, могут зайти на веб-сервере в конфигуратор и что-то там нажать. Но т.к. я виндос на веб-серверах, серверах 1С и серверах баз данных в принципе не использую, то я, как настоящий мужик, буду все делать из командной строки (было бы чего делать. ). Итак, я пишу:
И, собственно, база у меня опубликовалась. Дальше я правлю vrd-файл, прописывая туда точку входа:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/testws"
ib="Srvr=192.168.1.5;Ref=testws;"
enable="false">
<ws>
<point name="Testws"
alias="testws.1cws"
enable="true"/>
</ws>
</point>После этого перезапускаю веб-сервер:
В итоге, когда мы в адресной строке напишем что-то типа "http://localhost/testws/ws/testws.1cws?wsdl", то увидим что-то такое:
БУМЕРАНГ
Для того, чтобы вызвать веб-сервис, можно установить расширение для гугл-хрома - Бумеранг. Для этого в меню "Дополнительные инструменты" выберите "Расширения", там нажмите на "Еще расширения" и в строке поиска наберите "Boomerang". Установите его и запустите. Дальше добавьте новый проект:
Нажмите "Ок". В открывшемся окне нажмите на единственную кнопку, предлагающую создать сервис.
В итоге слева у вас появится имя сервиса и функция "ОперацияTestWs". Дальше нужно создать запрос. Для этого справа от Функции сервиса нажмите на "стрелочку", открывающую выпадающее меню. В этом меню выберите "Ctreate request".
В итоге у Вас справа отобразится запрос к сервису:
В запросе вместо знака "?" нужно указать параметр сервиса, который будет ему передан. Дальше нажмите справа кнопку "Send", после чего сервис возвратит Вам запрашиваемые данные:
Собственно, у нас тут дата и время - как в аптеке.
Немножно остановлюсь на последних двух скриншотах. На первом есть вкладка AUTH - на ней можно указать имя пользователя и пароль к сервису. Остальные вкладки мне не пригодились. Для указания параметров, передаваемых веб-сервису, используйте сгенерированный запрос и подставляйте параеметр вместо знака "?".
На втором скриншоте мы видим ответ сервиса. Слева есть три переключателя вариантов отображения: активный - квадрат - полный результат запроса. Глаз - отображение непосредственно результата. И этакий треугольник-самолетик - полный RAW-ответ с заголовками сервера. На закладке "HEADERS" находятся отдельно заголовки ответа сервера. Дальше направо идет информация о длине запроса, времени выполнения, ответе сервера (200 - успешно). Дальше закладка с запросом и закладка с ответом. Сверху в меню "POST" можно выбрать тип запроса (GET/PATCH/PUT/DELETE. ) - это все может работать для REST-API 1С.
Надеюсь, данная публикация будет полезна и прольет свет на тему веб-серсисов и доступа к ним, сделая тестирование сервисов простым и понятным делом.
Если вы ничего не понимаете в WEB технологиях и такие слова, как json, get, post и прочее для вас ничего не значат и вы просто заядлый 1С-ник до мозга костей, но вам кровь из носу надо подружить 1С со сторонними приложениями или сайтом, то эта статья для вас.
Начну с того, что когда-то я был вынужден самостоятельно разбираться с Web-сервисами. Тогда как-то потихоньку мне удалось освоить это дело и понять, что и куда надо нажать, чтобы все заработало. Благо конфигурация, с которой пришлось работать, уже была напичкана Web-сервисами и можно было подглядеть и сделать по аналогии, а также в интернете мне удалось найти достаточно статей по этому делу. И так, на примерах (для меня это лучший способ изучения), я освоил это дело, и теперь меня они уже не пугают.
Уж не знаю, можно ли тут писать кириллицей, но чтобы вас в прогрессивном мире не засмеяли, пишите латиницей).
Дальше переходим на закладку Шаблоны URL и добавляем новый шаблон.
Тут важно само свойство Шаблон:
С помощью шаблона вы впоследствии сможете обратить к тем данным, которые вам передали. ИТАК: все данные, которые вы хотите получить извне, можно разделить на 2 блока - обязательные и не обязательные.
Обязательные данные/параметры запихиваем в шаблон, тем самым если тот, кто обращается к сервису, их не заполнил, то сервис априори выдаст ошибку, а вы при разработке текста модуля обработчика будете уверены, что эти данные есть. Как это делается: в строке Шаблон в фигурных скобках "<>", чередуя с со знаком "/", пишем имена переменных. Например, нам обязательно нужен артикул - тогда пишем /. Если нам надо получить артикул, имя и имя пользователя, строка шаблона будет выглядеть так: /// и т.д. Каждый из таких параметров в тексте модуля обработчика можно будет получить так: Запрос.ПараметрыURL["<имя параметра>"]. Если обязательных нет, то шаблон выглядит так: /*.
Не обязательные данные, которые мы хотим получать через сервис, в шаблоне НЕ описываются. При построении ссылки, для обращения к сервису они описываются в конце ссылки после знака "?", разделяются символом амперсанда "&" и имеют структуру <имя параметра>=<значение параметра>. В тексте модуля обработчика к ним можно обратиться конструкцией: Запрос.ПараметрыЗапроса.Получить("<имя параметра>"). НО: важно помнить, раз они не обязательны, то их может и не быть, соответственно значение проверяем на Неопределено.
Администрирование - Публикация на веб сервере.
Читайте также: