ZBLOG

兼容本地8888端口,每当有访问时该服务时,服务请求http://10.15.35.189:888/monitors,获得的resp返回给请求

要在服务请求时动态地获取数据并返回给请求,你可以修改do_GET方法如下:

class ProxyHandler(BaseHTTPRequestHandler):
    def __init__(self, *args, **kwargs):
        super(ProxyHandler, self).__init__(*args, **kwargs)
        self.cache = {}

    def get_data_from_url(self, url):
        try:
            response = requests.get(url)
            if response.status_code == 200:
                return response.json().get('monitors', [])
        except requests.RequestException as e:
            logging.error(f'{url} request failed!')
        
        return []

    def do_GET(self):
        if self.path == '/gw/monitor':
            urls = ['http://10.15.35.188:8888/monitor', 'http://10.15.35.189:888/monitor']
            monitors = []
            
            for url in urls:
                if url not in self.cache:
                    data = self.get_data_from_url(url)
                    self.cache[url] = data
                    monitors += data
                else:
                    monitors += self.cache[url]

            self.send_response(200)
            self.send_header('Content-type', 'application/json')
            self.end_headers()

            merged_dict = {'monitors': monitors}
            merged_json = json.dumps(merged_dict, indent=4)
            self.wfile.write(merged_json.encode())
        else:
            self.send_response(404)
            self.end_headers()

这样,每当有访问 /gw/monitor 的请求时,会先检查缓存中是否存在对应的数据。如果存在,则直接使用缓存数据;否则,通过调用 get_data_from_url() 方法从远程服务器获取数据,并将数据存入缓存中。最后,将合并后的数据返回给请求方。请注意,这里只是一个简单的示例,并没有处理缓存过期和更新等复杂逻辑,你可以根据实际需求进行进一步扩展。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=13348

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?