关于 Python 中 websocket-client 库的使用有一些疑惑

2020-04-21 20:57:42 +08:00
 black201w

想用 websocket-client 库和这个项目 https://github.com/Chocolatl/qqlight-websocket 写一个 QQ 机器人,我的 python 代码大致如下

import time
import websocket
import json


class QLWebSocket:
    def __init__(self, address="127.0.0.1", port=2333, path="/"):
        def on_open(*args):
            def run(*args):
         
                # 发送这段 json,服务器返回现在登录的 QQ 号,返回的 json 如下
                # {"id": "1.048596", "result": "114514"}
                # id 与发送的 id 相同,result 为 QQ 号
                
                self.ws.send('{"id": "1.048596","method": "getLoginAccount"}')
                
            thread.start_new_thread(run, ())
            
        ws_link = "ws://%s:%d%s" % (address, port, path)
        self.ws = websocket.WebSocketApp(ws_link,
                                         on_message=self.on_message,
                                         on_close=self.on_close)
        self.ws.on_open = on_open
        
        
    def on_message(self, message): # message 为服务器发送的 json 字符串
    	print(message)
        
    def get_cookies(self):
    	self.ws.send('{"id": "1.16584161","method": "getCookies"}')
        
        
bot = QLWebSocket()


if __name__ == '__main__':
    bot.run()

现在的问题就是,只要是服务器发送过来的 json 都会由 on_message()函数处理。

我想要的效果是比如在我执行 get_cookies()函数时,能直接通过 get_cookies()返回获取到的 cookie 字符串

所以请问各位大佬应该怎么实现这个效果呢?

2080 次点击
所在节点    Python
4 条回复
black201w
2020-04-22 09:00:43 +08:00
救命啊= =
bnm965321
2020-04-22 11:06:50 +08:00
没看懂你在说啥,你在哪里调用 get_cookies(),为什么不能获取它的返回值?
black201w
2020-04-22 12:21:37 +08:00
@bnm965321 比如说我就在 main 里调用 bot.get_cookies(),服务器返回给我 json 是给 on_message()处理了,但我想让它成为 get_cookies()的返回值
bnm965321
2020-04-22 12:28:56 +08:00
你要把服务器给你的 cookies json 先缓存,websocket 是推送模型。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/664776

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX