将 User-Agent 重写为所有打开的 URI 请求

Rewrite User-Agent to all Open URI Request

使用Rails4.2.10

感谢 mongoid papaerclipopen_uri

,我想打开来自 URL 的图像

它在 95% 的用例中都能完美运行,但某些网站在看到请求的 user-agentRuby.

时会向我发送 404

问题出在库 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 完成的所有请求添加一个默认的 header =15=]

幸运的是,对于您的用例,在 ruby.

中没有 class 因修改而关闭之类的事情

在初始化程序中为您的 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)

paperclip-3.5.4

的解决方案
module Paperclip
  class UriAdapter < AbstractAdapter
    def download_content
      open(@target,"User-Agent" => "Your Custom User Agent")
    end
  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,重写是你的目标