400来自具有C#(RESTSHARP)的立交桥API,但不是来自Python(Urllib)的400



我正在对在本地服务器上运行的立交桥API进行查询。我正在从C#进行以下查询:

/api/interpreter?[out:json];way(around:1000,-33.933,18.4347)[amenity][name];(._;>;);out;

它返回400。

我使用python进行相同的呼叫,它返回我的期望(即具有"便利设施"one_answers"名称"标签的所有方式,以及所有相关的节点)。

我可以确认从c#(使用retsharp库)完成呼叫时,API"看到" ecape arece'ecape'ecape'%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的还是其他的?

您在第一个示例中忘记了data=参数,这是与查询一起需要的。这是对公共实例有效的校正URL:

http://overpass-api.de//api/interpreter?data=[out:json];way(around:1000,-33.933,18.4347)[amenity][name];(._;%3E;);out;

没有此参数,您将获得以下错误文本为HTML,并且 - 您可能已经猜到了-HTTP 400返回代码:

错误:第1行:解析错误:未知类型"%"

错误:第1行:解析错误:不允许空查询

错误:第1行:解析错误:';'或')'预期 - '3'找到。

最新更新