尝试使用Python请求将xml文件发送到OpenStreetMap Overpass API

尝试使用Python请求将xml文件发送到OpenStreetMap Overpass API,python,openstreetmap,Python,Openstreetmap,我有一个.xml请求,可以成功地从OpenStreetMapOverpassAPI检索数据 <?xml version="1.0" encoding="UTF-8"?> <osm-script> <query type="node"> <has-kv k="name" v="Bethesda"/> <has-kv k="network" v="Washington Metro"/> </query> <

我有一个.xml请求,可以成功地从OpenStreetMapOverpassAPI检索数据

<?xml version="1.0" encoding="UTF-8"?>
<osm-script>
<query type="node">
    <has-kv k="name" v="Bethesda"/>
    <has-kv k="network" v="Washington Metro"/>
</query>
<query type="way">
    <around radius="800"/>
    <has-kv k="building"/>
</query>
<union>
    <item/>
    <recurse type="down"/>
</union>
<print/>
</osm-script>
但会收到以下错误消息:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" lang="en"/>
  <title>OSM3S Response</title>
</head>
<body>

<p>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</p>
<p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Unknown type "file" </p>
<p><strong style="color:#FF0000">Error</strong>: line 1: parse error: An empty query is not allowed </p>
<p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Unknown type "=" </p>
<p><strong style="color:#FF0000">Error</strong>: line 1: parse error: An empty query is not allowed </p>
<p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Unknown type "Bethesda" </p>
<p><strong style="color:#FF0000">Error</strong>: line 1: parse error: ';' expected - '&' found. </p>
<p><strong style="color:#FF0000">Error</strong>: line 2: parse error: Unexpected end of input. </p>
这表示请求成功到达立交桥API并返回xml文件,但xml请求似乎没有成功传输。我尝试过一些变化,但没有比这更好的了。显然,我不太喜欢Python


您希望xml成为文章的主体。当您传入dict时,请求会将其转换为url查询字符串,该字符串的编码不正确,也不是api想要的。在我看来这很烦人。查询字符串和实体是不同的动物——它们不应该被压缩到一个参数中并自动地进行量化

这项工作:

import requests
r = requests.post('http://overpass-api.de/api/interpreter',
    data=open('Bethesda.xml', 'rb'))
print(r.text)

您希望xml成为文章的主体。当您传入dict时,请求会将其转换为url查询字符串,该字符串的编码不正确,也不是api想要的。在我看来这很烦人。查询字符串和实体是不同的动物——它们不应该被压缩到一个参数中并自动地进行量化

这项工作:

import requests
r = requests.post('http://overpass-api.de/api/interpreter',
    data=open('Bethesda.xml', 'rb'))
print(r.text)