たごもりすメモ

コードとかその他の話とか。

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に手を入れてどうにかするパッチも投稿されてるけど、それだと例外リストが使えないし、もうちょっとどうにかしたい。時間無いので後で考えよう。