2017-05-22 88 views
0

我有这样的代码发送带有GIF的MMS消息。 (在Heroku上使用Ruby和Sinatra)。尝试通过Twilio发送GIF时出现Invalid-Content-Type错误

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

失败,Twilio的调试控制台显示12300无效的内容类型错误。我确定我在这里错过了一些简单的东西,但我无法弄清楚什么。

回答

1

您使用的URL将根据请求的Accept标题返回不同类型的内容。

在Chrome中,“text/html”的“Content-Type”标头的响应。考虑到URL上的.gif后缀,这是令人惊讶的。

铬接受头的样子: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服务。

+0

呵呵。如何来一个例子[像这样](https://www.twilio.com/blog/2014/10/send-daily-animated-gifs-using-firebase-giphy-node-js-and-twilio-mms.html )的作品? (在标题下:在注册中发送Gif)。我知道这是node.js而不是Ruby,但我猜测链接的工作原理是一样的。 – landen

+0

也许gify改变了他们为内容提供服务的方式,因为这是写的。 – Kris

+0

'curl -I http:// media.giphy.com/media/zl170rmVMCpEY/giphy.gif'将Content-Type显示为'image/gif'。 – Kris