Dubbo--python+telnetlib访问

简介

支持调用dubbo接口的python库有hessian、dubbo_telnet、telnetlib

  • hessian:通过http协议请求
  • dubbo_telnet:通过模拟控制台命令行调用telnet实现,官方不再维护
  • telnetlib:通过模拟控制台命令行调用telnet实现,python3自带包

案例代码

from telnetlib import Telnet
import re

Host = '10.12.224.14'
Port = 20880
interface = 'com.bjpowernode.dubbo.service.UserService'

t = Telnet(Host, Port, timeout=10)
# s = t.read_until(b"dubbo>", timeout=2)
t.write('invoke com.bjpowernode.dubbo.service.UserService.queryUserById(1223,"lili")'.encode('utf-8'))
t.write(b'\n')
data = t.read_until(b"dubbo>", timeout=2).decode('utf-8').strip('dubbo>')
print(data)
res = re.search(r'(\{.*\})', data).group()
print(res)
print(type(res))

>
{"id":1223,"username":"lili"}
elapsed: 1 ms.

{"id":1223,"username":"lili"}
<class 'str'>
b"invoke com.bjpowernode.dubbo.service.UserService.queryUserById(1223, 'lisi123')"
{"id":1223,"username":"lisi123"}

函数封装

from telnetlib import Telnet
import re


def do_telnet(host, interface: str, method: str, data, port=20880, finish_flag='dubbo>'):
    dt = Telnet(host, port, timeout=5)
    server_data = 'invoke {}.{}{}'.format(interface, method, data).encode('utf-8')
    dt.write(server_data + b'\n')
    response = dt.read_until(finish_flag.encode('utf-8'), timeout=2).decode('utf-8').strip(finish_flag)
    res = re.search(r'(\{.*\})', response).group()
    return res


if __name__ == '__main__':
    Host = '10.12.224.14'
    Port = 20880
    interface = 'com.bjpowernode.dubbo.service.UserService'
    method = 'queryUserById'
    data = (1223, 'lisi123')
    r = do_telnet(Host, interface, method, data)
    print(r)

>
{"id":1223,"username":"lisi123"}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值