bash - API 调用在浏览器中有效,但在 curl/wget 中无效

标签 bash api curl geocoding

我想使用 Mapquest 地理编码 API。在浏览器中打开此 URL 会返回包含结果的 XML:

http://open.mapquestapi.com/nominatim/v1/search?format=xml&q=Wangaratta

<searchresults timestamp="Mon, 07 Apr 14 07:30:18 +0000" attribution="Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright" querystring="Wangaratta" polygon="false" exclude_place_ids="6310497,2436827371,2461158662,51900617,41796980,50259050,2461159039,41201823,2466076780" more_url="http://open.mapquestapi.com/nominatim/v1/search?format=xml&exclude_place_ids=6310497,2436827371,2461158662,51900617,41796980,50259050,2461159039,41201823,2466076780&accept-language=en-AU,en;q=0.8,en-US;q=0.6,fr;q=0.4&q=Wangaratta">
<place place_id="6310497" osm_type="node" osm_id="662026831" place_rank="18" boundingbox="-36.3962509,-36.3162509,146.2830914,146.3630914" lat="-36.3562509" lon="146.3230914" display_name="Wangaratta, Victoria" class="place" type="town" importance="0.48506868719577" icon="http://open.mapquestapi.com/nominatim/v1/images/mapicons/poi_place_town.p.20.png"/>
<place place_id="2436827371" osm_type="relation" osm_id="2562060" place_rank="20" boundingbox="-36.40642,-36.3243,146.25683,146.37104" lat="-36.36536" lon="146.311987722222" display_name="Wangaratta, Victoria, Australia" class="boundary" type="administrative" importance="0.35" icon="http://open.mapquestapi.com/nominatim/v1/images/mapicons/poi_boundary_administrative.p.20.png"/>
<place place_id="2461158662" osm_type="way" osm_id="220567499" place_rank="26" boundingbox="-36.3508096,-36.3504818,146.310831,146.3127119" lat="-36.3508096" lon="146.3127119" display_name="Rowan Street, Wangaratta, Victoria, 3677" class="highway" type="tertiary" importance="0.2"/>
<place place_id="51900617" osm_type="way" osm_id="52507281" place_rank="26" boundingbox="-36.3570551,-36.3551449,146.3200286,146.3228768" lat="-36.3558843" lon="146.3217743" display_name="Ovens Street, Wangaratta, Victoria, 3676, Australia" class="highway" type="tertiary" importance="0.2"/>
<place place_id="2466076780" osm_type="way" osm_id="225372336" place_rank="30" boundingbox="-36.3553793,-36.3549558,146.3167037,146.3171676" lat="-36.35516755" lon="146.316935620069" display_name="Wangaratta, Norton Street, Wangaratta, Victoria, 3677" class="railway" type="station" importance="0.101" icon="http://open.mapquestapi.com/nominatim/v1/images/mapicons/transport_train_station2.p.20.png"/>
</searchresults>

但是在命令行上尝试它没有任何用处:

$ curl http://open.mapquestapi.com/nominatim/v1/search?format=xml&q=Wangaratta
[1] 15525
$ <?xml version="1.0" encoding="UTF-8" ?>
<searchresults timestamp='Mon, 07 Apr 14 07:33:04 +0000' attribution='Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright' querystring='' polygon='false' more_url='http://open.mapquestapi.com/nominatim/v1/search?format=xml&amp;exclude_place_ids=&amp;q='>
</searchresults>

有什么区别?

最佳答案

现在很明显了。 URL 中的 & 由 Bash 解释,因此 URL 需要用引号括起来。

$ curl 'http://open.mapquestapi.com/nominatim/v1/search?format=xml&q=Wangaratta'
<?xml version="1.0" encoding="UTF-8" ?>
<searchresults timestamp='Mon, 07 Apr 14 07:33:52 +0000' attribution='Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright' querystring='Wangaratta' polygon='false' exclude_place_ids='6310497,2436827371,2461158662,51900617,41796980,50259050,2461159039,41201823,2466076780' more_url='http://open.mapquestapi.com/nominatim/v1/search?format=xml&amp;exclude_place_ids=6310497,2436827371,2461158662,51900617,41796980,50259050,2461159039,41201823,2466076780&amp;q=Wangaratta'>
<place place_id='6310497' osm_type='node' osm_id='662026831' place_rank='18' boundingbox="-36.3962509,-36.3162509,146.2830914,146.3630914" lat='-36.3562509' lon='146.3230914' display_name='Wangaratta, Victoria' class='place' type='town' importance='0.48506868719577' icon='http://open.mapquestapi.com/nominatim/v1/images/mapicons/poi_place_town.p.20.png'/><place place_id='2436827371' osm_type='relation' osm_id='2562060' place_rank='20' boundingbox="-36.40642,-36.3243,146.25683,146.37104" lat='-36.36536' lon='146.311987722222' display_name='Wangaratta, Victoria, Australia' class='boundary' type='administrative' importance='0.35' icon='http://open.mapquestapi.com/nominatim/v1/images/mapicons/poi_boundary_administrative.p.20.png'/><place place_id='2461158662' osm_type='way' osm_id='220567499' place_rank='26' boundingbox="-36.3508096,-36.3504818,146.310831,146.3127119" lat='-36.3508096' lon='146.3127119' display_name='Rowan Street, Wangaratta, Victoria, 3677' class='highway' type='tertiary' importance='0.2'/><place place_id='51900617' osm_type='way' osm_id='52507281' place_rank='26' boundingbox="-36.3570551,-36.3551449,146.3200286,146.3228768" lat='-36.3558843' lon='146.3217743' display_name='Ovens Street, Wangaratta, Victoria, 3676, Australia' class='highway' type='tertiary' importance='0.2'/><place place_id='2466076780' osm_type='way' osm_id='225372336' place_rank='30' boundingbox="-36.3553793,-36.3549558,146.3167037,146.3171676" lat='-36.35516755' lon='146.316935620069' display_name='Wangaratta, Norton Street, Wangaratta, Victoria, 3677' class='railway' type='station' importance='0.101' icon='http://open.mapquestapi.com/nominatim/v1/images/mapicons/transport_train_station2.p.20.png'/></searchresults>

关于bash - API 调用在浏览器中有效,但在 curl/wget 中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22906230/

相关文章:

c# - Web API 安全和身份验证 - 不记名 token

php - 如何在 php 中添加密码以 curl ?

regex - 如何在 if 语句 bash 中使用多个 grep

bash - 如何更改文件中的字符串,但将更改保存在另一个文件中,而不是原始文件中?

bash - 如何保护 mongodump 从远程计算机进行备份?

PHP 超薄框架 : The requested URL was not found on this server

linux - 遇到 Ubuntu .profile 和 .bashrc 问题

php - 如何使用 Slim 接受所有 REST URI 中的排序和分页参数?

python - requests.exceptions.SSLError : ("bad handshake: Error([(' SSL routines', 'SSL23_GET_SERVER_HELLO' , 'sslv3 alert handshake failure' )],),)

php - 时间超过30秒错误?文件获取内容