将User-Agent重写为所有Open URI请求

时间:2017-10-04 09:00:27

标签: ruby-on-rails ruby paperclip user-agent open-uri

使用Rails 4.2.10

由于mongoid papaerclipopen_uri

,我想通过网址打开图片

它完全适用于95%的用例,但有些网站在看到请求的user-agentRuby时向我发送了404。

问题在于lib paperclip => paperclip/io_adapters/uri_adapter.rb in download_content at line 48

def download_content
    options = { read_timeout: Paperclip.options[:read_timeout] }.compact

    open(@target, **options)
end

如果我可以在这里添加一个选项,那就太棒了,但我认为不可能,所以我想将user-agent的默认标题添加到open_uri所做的所有请求中{1}}

2 个答案:

答案 0 :(得分:1)

幸运的是,对于你的用例,没有一个类被关闭以防止ruby中的修改。

在初始化程序中为您的rails应用添加补丁。结构大致如下:

config/initializers/some_arbitrary_name.rb

module UriAdapterPatch
  def open(url, options)
    # alter the objects however you want
    super(altered_or_original_url, altered_or_original_options)
  end
end

Paperclip::UriAdapter.prepend(UriAdapterPatch)

答案 1 :(得分:1)

paperclip-3.5.4 的解决方案

module Paperclip
  class UriAdapter < AbstractAdapter
    def download_content
      open(@target,"User-Agent" => "Your Custom User Agent")
  end
end

# for example put it in config/initializers/paperclip_user_agent.rb

对于其他版本,只需写入项目文件夹

gem which paperclip

并在输出文件paperclip/io_adapters/uri_adapter.rb的路径中查找

有函数def download_content,你的目的是重写