Как правильно запросить геосервер 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. Со следующими параметрами:
- URL: http://demo.opengeo.org/geoserver/wfs
- Параметры: добавить тело> так же, как ваш:
<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, которая является обязательной.