将 User-Agent 重写为所有打开的 URI 请求
Rewrite User-Agent to all Open URI Request
使用Rails4.2.10
感谢 mongoid
papaerclip
和 open_uri
,我想打开来自 URL 的图像
它在 95% 的用例中都能完美运行,但某些网站在看到请求的 user-agent
是 Ruby
.
时会向我发送 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
,重写是你的目标
使用Rails4.2.10
感谢 mongoid
papaerclip
和 open_uri
它在 95% 的用例中都能完美运行,但某些网站在看到请求的 user-agent
是 Ruby
.
问题出在库 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
,重写是你的目标