使用Python requests调用Zoopla房源API返回Unknown location问题求助
我一眼就看出问题出在哪啦!你在使用requests.get()的时候,错误地用了data参数来传递查询参数——这就是导致API返回“Unknown location entered”的核心原因。
问题分析
HTTP GET请求的参数应该放在URL的查询字符串里(就是URL末尾?后面的部分),但data参数是为POST请求设计的,它会把数据塞进请求体里。Zoopla的这个property_listings接口是GET接口,只会读取URL里的查询参数,根本不会看请求体里的内容。所以你看似传了area和api_key,但实际上API完全没收到这些参数,自然返回错误码7了。
看你的输出也能佐证这一点:
print(r3.request.url) → https://api.zoopla.co.uk/api/v1/property_listings
print(r3.request.body) → area=Oxford&api_key=xxxxxxxxx
正常的GET请求应该把参数拼在URL后面,但你的URL里没有任何查询参数,参数都跑到请求体里去了,这和IO-Docs里的请求格式完全不一样。
修正后的代码
把data换成params参数,requests库会自动把参数拼接到URL的查询字符串中,和IO-Docs里的请求保持一致:
import requests api_key = "xxxxxxxx" # 注意这里最好用字符串引号包裹 r3 = requests.get( "https://api.zoopla.co.uk/api/v1/property_listings", params={'area':'Oxford','api_key':api_key} )
验证修正效果
修正后再打印r3.request.url,你会看到URL变成了:https://api.zoopla.co.uk/api/v1/property_listings?area=Oxford&api_key=xxxxxxxx
这样API就能正确接收到你的参数,应该就能正常返回房源列表啦!
内容的提问来源于stack exchange,提问作者Gianfranco Bombardieri

