【发布时间】:2016-12-11 21:10:40
【问题描述】:
我正在查询本地服务器上运行的 Overpass API。我正在从 C# 执行以下查询:
/api/interpreter?[out:json];way(around:1000,-33.933,18.4347)[amenity][name];(._;>;);out;
它返回一个 400。
我使用 python 执行相同的调用,它返回我期望的结果(即所有具有“amenity”和“name”标签的方式,以及所有关联的节点)。
我可以确认,当从 C#(使用 RestSharp 库)完成调用时,API“看到”转义字符“%3E”代替“>”,而在调用时“看到”“>”是从 python 完成的。以下是 apache 日志中记录的两个调用:
"GET /api/interpreter?[out:json];way(around:1000,-33.933,18.4347)[amenity][name];(._;>;);out; HTTP/1.1" 200 20878 "-" "Python-urllib/3.5"
"GET /api/interpreter?[out:json];way(around:1000,-33.933,18.4347)[amenity][name];(._;%3E;);out; HTTP/1.1" 400 987 "-" "RestSharp/105.2.3.0"
正如你所见,除了那个字符之外,调用是相同的。估计问题是由这个字符引起的。但是,我有一个使用此字符的成功调用的不同示例:
GET /api/interpreter?data=[bbox][out:json];way[highway=primary];(._;%3E;);out;&bbox=27.8539696457985,-33.0194661675922,27.9045061954916,-33.0053817324078 HTTP/1.1" 200 6037 "-" "RestSharp/105.2.3.0"
这里发生了什么?是角色导致了 400 还是其他原因?
【问题讨论】:
-
"是角色导致了 400 还是其他原因?"如果你更正这个字符,你会看到它。
标签: c# escaping openstreetmap restsharp overpass-api