从另一个程序调用pythonapi

2024-06-09 12:25:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pythonapi,我正在尝试调用并打印给定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结构作为一个独立的函数进行解析时,代码会以正确的格式打印输出。你知道吗

我做错什么了?你知道吗


Tags: 代码importselfipapiappflaskcity
1条回答
网友
1楼 · 发布于 2024-06-09 12:25:55

您的ip_city函数返回json对象,只需调用requests对象上的json函数

response = requests.get("http://0.0.0.0:5000/ip_city/10.12.1.1").json()

升级版:

可能在函数中找不到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'

相关问题 更多 >