如何通过 POST 正确请求地理服务器 WFS?
Posted
技术标签:
【中文标题】如何通过 POST 正确请求地理服务器 WFS?【英文标题】:How to correctly request a geoserver WFS via POST? 【发布时间】:2014-07-25 09:55:44 【问题描述】:我有一个 geoserver 实例,其中包含我们的数据。通过 GET 请求这个可以正常工作并返回预期的结果。但遗憾的是它不适用于 POST。
准确地说,这里是使用 GET 的 Capabilities 请求,它返回一个有效的 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 异常:
<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-body 被发送或被忽略。我这里哪里错了?
编辑:好的,我解决了这个问题。问题是 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/
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 版本相同的响应。
你能用这个演示服务器尝试同样的测试吗?
更新
几位cmet聊天后,OP找到了自己的解决方案。 POST 调用缺少必填的 Content-Type-Header 信息。
【讨论】:
wget -O wfs --post-file=request.xml 'demo.opengeo.org/geoserver/wfs' 导致类似的 OWS 异常 这不是答案,为什么不是评论? 所以您的语法/工具可能不正确?您在网络坐席上取得了不错的成绩? 那么这个 wget-call 有什么问题呢?我在编程时偶然发现了这个问题并使用了 wget,因为它是一个标准工具,因此错误就在我身边(请求、url、wget-params、Geoserver-config 等等)。我的问题已经在原帖中了:我做错了什么。你复制了这个问题。 好的几点:这是一个答案,因为评论在字符方面受到限制。我试图帮助你解决你的错误,如果我有一个即时的解决方案,我已经把它带来了。据我所知,无论服务器是什么,您都会遇到仅使用 wget 工具发生的事情。而且您不必冒犯他人,这无济于事。以上是关于如何通过 POST 正确请求地理服务器 WFS?的主要内容,如果未能解决你的问题,请参考以下文章
插入空的,通过地理服务器将请求文本/ xml发送到postgis整数字段中
使用 WFS 地理服务器的 Geomesa accumulo CURD 数据操作