Telegram API认证问题:Python调用auth.sentCode遇404,如何获取OTP?
解决Telegram auth.sentCode调用返回"not found"的问题
核心原因是你误解了Telegram API的调用方式:auth.sentCode是MTProto协议的构造器,不是REST接口,直接用Postman发起普通HTTP请求必然会返回404——Telegram的MTProto API不支持这种调用方式,需要遵循MTProto的二进制协议规范,或者用封装好的Python库来处理底层逻辑。
用Python调用auth.sentCode的正确方式
推荐使用Telethon或Pyrogram这两个成熟的MTProto客户端库,它们已经封装了所有底层协议细节,直接调用对应的方法即可获取OTP。
示例1:使用Telethon
- 安装库:
pip install telethon
- 代码实现:
首先你需要去Telegram开发者平台申请API ID和API Hash(登录你的Telegram账号,创建一个应用就能拿到)。
from telethon import TelegramClient # 替换成你的API信息和手机号 API_ID = 123456 API_HASH = 'your_api_hash_here' PHONE_NUMBER = '+8613xxxxxxxxx' # 必须带国际区号 client = TelegramClient('session_name', API_ID, API_HASH) async def send_otp(): await client.connect() # 发送验证码请求,对应auth.sentCode result = await client.send_code_request(PHONE_NUMBER) print(f"验证码已发送,类型:{result.type},验证码哈希:{result.phone_code_hash}") await client.disconnect() if __name__ == '__main__': import asyncio asyncio.run(send_otp())
示例2:使用Pyrogram
- 安装库:
pip install pyrogram tgcrypto
- 代码实现:
from pyrogram import Client API_ID = 123456 API_HASH = 'your_api_hash_here' PHONE_NUMBER = '+8613xxxxxxxxx' app = Client('my_account', api_id=API_ID, api_hash=API_HASH) async def send_otp(): await app.connect() # 发送验证码请求 phone_code_hash = await app.send_code(PHONE_NUMBER) print(f"验证码已发送,哈希:{phone_code_hash}") await app.disconnect() if __name__ == '__main__': import asyncio asyncio.run(send_otp())
关键注意事项
- 必须使用你自己的API ID和Hash,否则会被拒绝请求
- 手机号必须包含国际区号(比如+86、+1),不能只用本地号码
- 如果频繁请求可能触发Telegram的风控机制,会限制发送验证码,此时需要等待一段时间或使用代理
- Postman无法直接调用MTProto构造器,因为它不支持MTProto的二进制序列化、认证等底层逻辑,只能用专用的MTProto客户端库
内容的提问来源于stack exchange,提问作者Mohammad Amin Gharbavian
相关产品推荐
相关产品推荐

