初始身份验证:发送`授权发送代码`接收“msg_container”而不是`认证码`在python中

2024-09-29 01:21:14 发布

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

我已经下载了Telegram(https://telegram.org/)的CLI版本。该CLI界面的不完整版本可从以下位置下载: https://github.com/griganton/telepy

现在,身份验证一切正常,但实际功能是0。在

所以我稍微修改了JASON方案,并添加了初始身份验证所需的功能

{'id': '1988976461',
 'method': 'sendCode',
 'params': [{'name': 'phone_number', 'type': 'string'},
            {'name': 'sms_type', 'type': 'int'},
            {'name': 'api_id', 'type': 'int'},
            {'name': 'api_hash', 'type': 'string'},
            {'name': 'lang_code', 'type': 'string'}],
 'type': 'SentCode'}

如文件所述 https://core.telegram.org/method/auth.sendCode

现在,在我没有这样做之后,根据文档显示,在发送一条请求短消息代码的消息之后,我应该接收到auth.SentCode,在包0xEFED51D9开头的十六进制代码,但是我收到的是来自服务器的响应,类型为msg_container73f1f8dc的东西,似乎与我的请求没有任何关联。在

这一切看起来很烦人和奇怪,我不知道什么可能会导致,总之,我遵循了文档,并尝试按要求实现。在

我发送的数据包看起来很好,实际上我把短信代码放到了我的手机上。。但由于某种原因,我得到的反应不好\不清楚。在

我调用JSON中实现的函数,如下所示:

^{pr2}$

所以它在发挥作用。。但我需要 phone_code_hash。电报本身也有一些奇怪的原因。看看他们给出的一个查询示例,这些数字与文档中所说的不匹配(引用了他们的文档):

查询示例:

(auth.sendCode "79991234567" 1 32 "test-hash" "en")
=
(auth.sentCode
  phone_registered:(boolFalse)
  phone_code_hash:"2dc02d2cda9e615c84"
)

d16ff372 3939370b 33323139 37363534 00000001 00000020 73657409 61682d74 00006873 e77e812d
=
2215bcbd bc799737 63643212 32643230 39616463 35313665 00343863 e12b7901

从这里拍摄:https://core.telegram.org/method/auth.sendCode

每个部分上预期的第一个DWORD应该是不同的。。 例如:768d5f4d而不是d16ff372。。在

那我还缺什么呢?在

一些参考(由于某些原因,如果我不把它作为代码段,它不允许我发布)

https://core.telegram.org/constructor/auth.sentCode
https://core.telegram.org/mtproto/service_messages
https://core.telegram.org/method/auth.sendCode

Tags: 代码name文档httpsorgcoreauthstring
2条回答

问题是插座处理不当。。服务器刚刚发送了两个包。在

第一个包是一些Message_Service,第二个包是我真正想要的数据。。在

这很奇怪,因为它没有在文档中提到这些消息

电报大多数时候会把消息打包到一个msg_容器中。在

例如,您可能会得到以前消息的消息确认以及上一条消息的预期响应。在

最好的办法是设置代码来处理接收到的容器的情况,检查容器中的项目计数,然后循环接收到的消息,将不同的消息类型传递给适当的处理程序。在

另请注意,您可能会得到一个rpc_响应,其中包含gzip消息,在这种情况下,您需要解压缩,然后处理消息内容,其中也可能包含消息集合

干杯

相关问题 更多 >