【问题标题】:How does one make a Telegram MTProto protocol api call?如何进行 Telegram MTProto 协议 api 调用?
【发布时间】:2015-07-30 07:50:18
【问题描述】:

例如调用/包装auth.sentCode 方法(链接如下):

https://core.telegram.org/method/auth.sendCode

我试过了:

var url = "https://149.154.167.40";  
var data = "(auth.sendCode \"PHONE_CODE+NO\" 0 APP_ID \"SECRET_HASH\" \"en\")";  
using (var wc = new WebClient())  
{  
var result = wc.UploadData(url, GetBytes(data));  
}  

我得到了这个异常(和内部异常)

底层连接已关闭:发生意外错误 一个发送。 (认证失败,因为对方已经关闭 传输流。)

【问题讨论】:

  • 我没有使用此协议的经验,但大多数时候我看到的异常是 SSL/TLS 问题。我看到您使用的是硬编码 IP - 您的应用程序是否可能拒绝自签名证书? (或者:该端点是否肯定支持 https?我在将 https 请求发送到 http 端点时遇到了类似的错误。)
  • 我认为到目前为止还没有例子,只是在 githhub 上未实现的库
  • 我已经发布了一些代码(在 vb.net 中)让您从这里开始stackoverflow.com/a/32809138/44080

标签: c# telegram mtproto


【解决方案1】:

您可以开始使用this SO post

您需要先了解如何生成 AuthKey

Telegram-API 文档写得不是很好,但如果你继续研究它......你最终会得到它。

通过生成 AuthKey 将帮助您建立一个模式和函数,然后您可以使用它们来处理 API 的其余部分

干杯。

【讨论】:

    【解决方案2】:

    如果您尝试通过 Web 浏览器访问 https://149.154.167.40,您会看到 https 协议未启用。如果您查看here,有一个实现 https 的子域列表,您可以尝试其中一个来发出您的 api 请求。由于 CROSS-ORIGIN 政策,我不确定电报是否会阻止您的请求,因为响应中存在 access-control-allow-origin:* 标头。如果这不起作用,您可以像here 中的android 应用程序那样实现自己的握手。希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      使用TLSharp。要验证用户,只需运行此代码

         var hash = await client.SendCodeRequest(phoneNumber);
      
         var code = "1234"; //code that you receive from Telegram 
      
         var user = await client.MakeAuth(phoneNumber, hash, code); 
      

      【讨论】:

        猜你喜欢
        • 2022-10-25
        • 2019-12-30
        • 1970-01-01
        • 1970-01-01
        • 2018-04-11
        • 2012-02-14
        • 2020-09-29
        • 2016-12-24
        • 2014-01-01
        相关资源
        最近更新 更多