我有一个Python API,我正在尝试调用并打印给定ip范围的城市名称。 python API如下所示:
import datetime as dt
from flask import Flask, jsonify, request
class IpRangeSearch:
RANGES = {
'Tokyo': [
{'start': '10.10.0.0', 'end': '10.10.255.255'},
{'start': '192.168.1.0', 'end': '192.168.1.255'},
],
'Paris': [
{'start': '10.12.0.0', 'end': '10.12.255.255'},
{'start': '172.16.10.0', 'end': '172.16.11.255'},
{'start': '192.168.2.0', 'end': '192.168.2.255'},
]
}
def __init__(self):
pass
def get_city(self, ip):
for city, ipranges in self.RANGES.items():
for iprange in ipranges:
if ip >= iprange['start'] and ip <= iprange['end']:
return city
app = Flask(__name__)
ip_range_search = IpRangeSearch()
@app.route('/ip_city/<ip>')
def ip_city(ip):
return jsonify({'city': ip_range_search.get_city(ip)})
if __name__ == '__main__':
app.run(host='0.0.0.0')
我正在从另一个python程序调用API:
import json
import oauth2 as oauth
import requests
response = requests.get("http://0.0.0.0:5000/ip_city/10.12.1.1")
print(response.status_code)
print(response.content)
理想情况下,上面的代码应该打印出来:
200
{
"city": Paris
}
但它的印刷:
200
{
"city": null
}
我不确定原因,但是当我尝试运行API代码将json结构解析为独立函数时 - 代码以正确的格式打印输出。
我做错了什么?
答案 0 :(得分:0)
您的ip_city
函数返回json
对象,只需调用json
对象上的requests
函数
response = requests.get("http://0.0.0.0:5000/ip_city/10.12.1.1").json()
<强> UPD:强>
也许IP
在您的函数中找不到,并且您的函数返回None
只需添加else
语句,然后进行检查。
def get_city(ip):
for city, ipranges in RANGES.items():
for iprange in ipranges:
if ip >= iprange['start'] and ip <= iprange['end']:
return city
return 'IP not found'