Как правильно запросить геосервер WFS через POST?

У меня есть экземпляр геосервера, который содержит наши данные. Запрос этого через GET работает нормально и возвращает ожидаемые результаты. Но, к сожалению, это не работает с POST.

Чтобы быть точным, вот запрос на Capabilities с GET, который возвращает действительный ответ GetCapabilities-Response:

http://myserver:8080/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities

Я проверяю это с помощью wget, поэтому команда выглядит так:

wget -O wfs 'http://myserver:8080/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities'

Сейчас я пробую Capabilities-запрос с помощью POST. Я создаю файл с запросом (именованный запрос) со следующим содержанием:

<GetCapabilities
 service="WFS"
 xmlns="http://www.opengis.net/wfs"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.opengis.net/wfs
 http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"/>

Это я запускаю против Geoserver со следующим wget:

wget -O wfs --post-file=request 'http://myserver:8080/geoserver/wfs'

Но теперь я получаю OWS-Exception:

<ows:ExceptionReport xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0.0" xsi:schemaLocation="http://www.opengis.net/ows/1.1 http://moa:8080/geoserver/schemas/ows/1.1.0/owsAll.xsd">
  <ows:Exception exceptionCode="MissingParameterValue" locator="request">
    <ows:ExceptionText>Could not determine geoserver request from http request org.geoserver.platform.AdvancedDispatchFilter$AdvancedDispatchHttpRequest@1e5c2cc</ows:ExceptionText>
  </ows:Exception>
</ows:ExceptionReport>

Похоже, что POST-тело не было отправлено или было проигнорировано. Что я здесь не так?


РЕДАКТИРОВАТЬ: ОК, я решил проблему. Проблема в том, что Geoserver ожидает Content-Type-Header для публикации XML-файла. Итак, правильный запрос выглядит следующим образом:

wget -O wfs --header='Content-Type: text/xml' --post-file=request.xml 'http://myserver:8080/geoserver/wfs'

Это возвращает ожидаемый результат.

1 ответ

Я пытался провести расследование по вашему делу, но у меня нет сервера, поэтому я использовал http://demo.opengeo.org/geoserver/web/

ПОЛУЧИТЬ тест: http://demo.opengeo.org/geoserver/wfs?service=wfs&version=1.1.0&request=GetCapabilities

Я получил полный ответ, как и вы.

Тест POST: я использовал http://www.hurl.it/ потому что я на компьютере с Windows. Со следующими параметрами:

<GetCapabilities service="WFS" xmlns="http://www.opengis.net/wfs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"/>

И я получил тот же ответ, что и версия GET.

Можете ли вы попробовать те же тесты с этим демо-сервером?


ОБНОВИТЬ

После нескольких комментариев в чате, ОП находит себе решение. В вызове POST отсутствовала информация Content-Type-Header, которая является обязательной.

Другие вопросы по тегам