【问题标题】:Telegram bot send photo by URL returns "Bad Request: wrong file identifier/HTTP URL specified"Telegram bot 通过 URL 发送照片返回“错误请求:指定了错误的文件标识符/HTTP URL”
【发布时间】:2018-09-13 16:35:09
【问题描述】:

我正在我的 Telegram 机器人中通过 url 发送 照片。对于某些照片,我从 Telegram 收到错误消息:

{"ok":false,"error_code":400,"description":"Bad Request: wrong file identifier/HTTP URL specified"}

例如: 发送this照片作品:

https://api.telegram.org/bot<BOT_KEY>/sendPhoto?chat_id=<CHAT_ID>&photo=https%3A%2F%2Fdrscdn.500px.org%2Fphoto%2F153590277%2Fq%253D80_m%253D2000%2Fv2%3Fwebp%3Dtrue%26sig%3D8b429a27872dfdb4f68ddc5edd488ce9e6a57977415fa323178cd62c5100a3ff

但是this 文件奇怪地不起作用:

https://api.telegram.org/bot<BOT_KEY>/sendPhoto?chat_id=<CHAT_ID>&photo=https%3A%2F%2Fdrscdn.500px.org%2Fphoto%2F247611167%2Fq%253D80_m%253D1500%2Fv2%3Fwebp%3Dtrue%26sig%3Dcfa117f225962250323c1202797abe8d45b47d59da12d780f4bf5231687c4331

请注意,对于这两个示例:

  • 网址有效
  • MIME 类型似乎没问题(实际上都是 jpg 文件)
  • 文件大小小于 10 MB

我做错了吗?或者对这个问题有什么想法?

谢谢,

【问题讨论】:

  • 你解决了吗?怎么样?

标签: telegram-bot


【解决方案1】:

可能的解决方案:

在文件url中添加随机值的无用属性,然后重试直到成功。

我也遇到过这个问题。我刚刚发现具有几乎相同 url 的几乎相同文件具有不同的行为。它震惊了我。我不认为这是我的文件的错,所以我通过添加一个无用的属性并调整其值来修改文件 url。重试多次,成功!

你可以通过运行这个 sn-p 来尝试一下。唯一的区别是每个文件网址末尾的&amp;random=58&amp;random=64

<h5>Your Bot Token</h5>
<input id="token" type="text" style="width: 400px;" value="{YourBotToken}" />

<h3>200 OK Example</h3>
<form action="https://api.telegram.org/bot{YourBotToken}/sendPhoto" method="POST" enctype="application/x-www-form-urlencoded">
  <textarea type="text/html" name="photo" rows="4" cols="70" readonly="readonly">http://api.map.baidu.com/staticimage?center=140.50,36.15&width=1024&height=576&zoom=6&amp;copyright=1&markers=140.50,36.15&markerStyles=l&random=58</textarea>
  <input type="text" name="chat_id" value="@{YourChatID}" />
  <input type="submit" value="Submit" onclick="this.form.action='https://api.telegram.org/bot'+document.getElementById('token').value+'/sendPhoto';" />
</form>
<br><br>
<h3>400 Bad Request Example</h3>
<form action="https://api.telegram.org/bot{YourBotToken}/sendPhoto" method="POST" enctype="application/x-www-form-urlencoded">
  <textarea type="text/html" name="photo" rows="4" cols="70" readonly="readonly">http://api.map.baidu.com/staticimage?center=140.50,36.15&width=1024&height=576&zoom=6&amp;copyright=1&markers=140.50,36.15&markerStyles=l&random=64</textarea>
  <input type="text" name="chat_id" value="@{YourChatID}" />
  <input type="submit" value="Submit" onclick="this.form.action='https://api.telegram.org/bot'+document.getElementById('token').value+'/sendPhoto';" />
</form>

【讨论】:

  • 这也解决了我的问题。但你发现实际问题了吗?这很奇怪!
  • @kiasaty 我认为问题出在 Telegram 服务器端。也许有什么问题中断了下载过程。现在,为了避免无休止的等待,我更喜欢在本地机器上下载和发送我的文件。
  • 天啊,你真的拯救了我的一天!我做了很多研究,直到在 url 上放置一些随机属性才找到原因。事实上,我之前提出了相同的理论(向 url 添加一些随机属性),但从未这样做,因为我认为那很愚蠢哈哈。
  • @JuanFernandoz 哈哈很高兴听到这个消息〜愚蠢但有效?
【解决方案2】:

我最近遇到了同样的问题。

API 文档page 说:

通过 URL 发送
...
其他配置可能会起作用,但我们不能保证它们会起作用

这意味着,如果您想 100% 确定,您应该使用 file_idmultipart/form-data 发送照片。

【讨论】:

  • multipart/form-data 是什么意思?有哪些领域?什么编码?我尝试将 JSON 消息对象的字段作为单独的字段发送,并将 reply_markup 字段编码为 JSON,将图像数据发送为 photo,但我仍然只收到 400 Bad Request。没有任何迹象表明出了什么问题。
猜你喜欢
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2016-09-11
  • 2017-07-30
  • 1970-01-01
  • 2015-09-20
  • 2017-06-06
相关资源
最近更新 更多