【问题标题】:Getting Skype status images from an HTTPS site从 HTTPS 站点获取 Skype 状态图像
【发布时间】:2011-09-23 21:10:57
【问题描述】:

我有一个 Rails 3 应用程序,我试图在其中显示一个包含用户及其各自 Skype 状态的页面。如果页面是 HTTP,这很容易做到:只需将元素的背景 url 设置为从 http://mystatus.skype.com/mediumicon/USERNAME 返回的图像。

但是,我的网站是 HTTPS,通过 HTTP 从 HTTPS 加载资源会导致 IE 阻塞。而且 Skype 显然不提供 HTTPS 版本的状态图标。

所以我采用了通过使用 Net::HTTP 调用上述 URL 来获取 Skype 状态服务器端(即在控制器中)的方法。然后我可以使用 send_data() 将图像字节写回页面而不会出现问题。但我不知道如何将图像字节与所有其他页面数据一起流回视图。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails https skype


    【解决方案1】:

    这是一个有效的代码 sn-p。我在 sinatra 中完成它纯粹是为了让它独立工作,但 get 块的内容是重要的行。

    require 'sinatra'
    require 'net/http'
    require 'base64'
    
    get '/' do
      base_image = Net::HTTP.get(URI.parse('http://mystatus.skype.com/mediumicon/Gazler'))
      "<img src=\"data:image/png;base64,#{Base64.encode64(base_image)}\">"
    end
    

    这利用了 base64 编码源。你可以阅读更多here

    请注意,这可能不适用于旧版本的 IE。

    对此的一种解决方案是对上述返回的图像进行 base64 编码,并将所有可能的图像存储为状态,然后根据结果进行比较。显然,每次这样做都会很慢,因此您需要将图像的 base64 存储在本地,然后在 base64 字符串上进行查找。

    希望这是有道理的。

    编辑

    作为辅助方法:

    def skype_status(username)
      base_image = Net::HTTP.get(URI.parse("http://mystatus.skype.com/mediumicon/#{username}"))
      content_tag("img", :src =>"data:image/png;base64,#{Base64.encode64(base_image)}")
    end
    

    【讨论】:

    • 完美!现在我只需要将那个块的内容放入一个助手中就可以了。
    • (未经测试的)辅助方法已添加。希望这会有所帮助。
    猜你喜欢
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2019-12-13
    • 2023-03-18
    • 2012-04-06
    • 1970-01-01
    相关资源
    最近更新 更多