尝试通过 Twilio SMS 发送 GIF 时出现无效内容类型错误

Invalid-Content-Type error when trying to send GIF through Twilio SMS

我有这段代码可以发送带有 GIF 的彩信。 (使用 Ruby 和 Sinatra,托管在 Heroku 上)。

client.messages.create(
  to: to,
  from: phone, 
  body: message,
  media_url: 'http://media.giphy.com/media/zl170rmVMCpEY/giphy.gif'
)

失败,Twilio 的调试控制台显示 12300 无效内容类型错误。我确定我在这里遗漏了一些简单的东西,但我不知道是什么。

您正在使用的 URL 是 returns 一种基于请求的 Accept header 的不同类型的内容。

在 Chrome 中 "Content-Type" header 的响应为 "text/html"。考虑到 URL.

上的 .gif 后缀,这是令人惊讶的

Chrome 接受 header 看起来像:Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

但是如果我使用 curl -I http://media.giphy.com/media/zl170rmVMCpEY/giphy.gif 我会得到 Content-Type: image/gif

如果您查看 HTML 页面上的图像 URL,在 Chrome 中,它实际上是:https://i.giphy.com/zl170rmVMCpEY.webp

webp 是 gif 的替代格式,我怀疑如果浏览器支持它,它会代替 gif 提供。

如果 Twilio 支持 webp 格式的图像,您可以改用它。

Gify 似乎也使用 mp4 格式,看起来他们标榜为 gif,但实际上并不向可以接受 HTML 或 WebP 内容的客户提供 gif。