Proxy対応そのいち
とりあえずフィードのクローラが対応しないとどうにもならんな、と思ったので以下のようなパッチをざくっと書いてみた。
--- ../fastladder/lib/crawler.rb 2008-02-08 20:22:10.000000000 +0900 +++ lib/crawler.rb 2008-02-14 14:24:31.773592550 +0900 @@ -100,7 +100,17 @@ def fetch(link, options = {}) uri = link.is_a?(URI) ? link : URI(link) - http = Net::HTTP.new(uri.host, uri.port) + proxy = if defined? CRAWL_HTTP_WITH_PROXY and CRAWL_HTTP_WITH_PROXY + raise "ProxyServer or ProxyPort missing" unless defined? CRAWL_HTTP_PROXY_SERVER and defined? CRAWL_HTTP_PROXY_PORT + if defined? CRAWL_PROXY_EXCEPTIONS_HOSTS and CRAWL_PROXY_EXCEPTIONS_HOSTS.inject(false){|b,r| b or uri.host =~ r} + [nil,nil,nil,nil] + else + [CRAWL_HTTP_PROXY_SERVER, CRAWL_HTTP_PROXY_PORT, (defined? CRAWL_HTTP_PROXY_USER ? CRAWL_HTTP_PROXY_USER : nil), (defined? CRAWL_HTTP_PROXY_PASS ? CRAWL_HTTP_PROXY_PASS : nil)] + end + else + [nil,nil,nil,nil] + end + http = Net::HTTP.Proxy(*proxy).new(uri.host, uri.port) case uri.scheme when "http" when "https"
config/initializers/constants.rb に以下のように設定を書いて使用する。
CRAWL_HTTP_WITH_PROXY = true CRAWL_HTTP_PROXY_SERVER = 'proxy.mylocaldomain' CRAWL_HTTP_PROXY_PORT = 8080 CRAWL_HTTP_PROXY_USER = nil CRAWL_HTTP_PROXY_PASS = nil CRAWL_PROXY_EXCEPTIONS_HOSTS = [ /.*\.mylocaldomain/, /192\.168\..*/ ]
いろんな設定のProxyとかはそうそう試せないので動作確認がちょっとアレな感じだが、とりあえずということで。コミュニティにも投稿しておいた。
……で、新しいフィードのsubscribeのときにはRFeedFinderが使われてるので、そっちにも対処が必要なんだよなあ。net/httpに手を入れてどうにかするパッチも投稿されてるけど、それだと例外リストが使えないし、もうちょっとどうにかしたい。時間無いので後で考えよう。