如何通过POST正确请求地理服务器WFS?

时间:2014-07-25 09:55:45

标签: post geoserver web-feature-service

我有一个geoserver实例,其中包含我们的数据。通过GET请求此操作可以正常工作并返回预期结果。但遗憾的是,它不适用于POST。

确切地说,这是对带有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'

现在我尝试使用POST的Capabilities-request。我创建了一个带有请求(命名请求)的文件,其中包含以下内容:

<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"/>

我使用以下wget对抗Geoserver:

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期望用于发布XML文件的Content-Type-Header。所以正确的请求如下所示:

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

返回预期结果。

1 个答案:

答案 0 :(得分:2)

我试图调查您的情况,但我没有服务器,因此我使用了http://demo.opengeo.org/geoserver/web/

GET测试: 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版本相同的回复。

您可以尝试使用此演示服务器进行相同的测试吗?


<强> 更新

聊了几句后,OP发现自己找到了解决方案。 POST调用缺少必须的Content-Type-Header信息。