sinkin' in the rain

10/02/2008

Fastladderの(認証)プロキシ対応

Fastladderのプロキシ対応と、認証プロキシ対応にチャレンジ中。Feedの追加周りはどうにかなったっぽい。

まずruby\1.8内にあるopen-uri.rb。これは元々、環境変数を見て、HTTP_PROXYとかCGI_HTTP_PROXYとかが設定されていればプロキシを使ってくれる。ここでは、プロキシ認証用にユーザとパスワードも渡すように変更。

       if proxy
- klass = Net::HTTP::Proxy(proxy.host, proxy.port)
+ klass = Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password)
end

次にgems内にあるrfeedfinder.rbの268行目から。こちらはプロキシ対応がまったくないので、open-uriにあわせて環境変数方式でプロキシが選択されるようにする。

         Timeout::timeout(20) {
-          html = Net::HTTP.get(URI.parse(link))
+          html = nil
+          proxy = URI::HTTP::find_proxy
+          if proxy
+            html = Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password).get(URI.parse(link))
+          else
+            html = Net::HTTP.get(URI.parse(link))
+          end
           data = Hpricot(html, :xml => true) if html.to_s !~ /404 Not Found/ 

これで、フィード追加時のバックエンドプロセスが、一通り以下のような環境変数を反映して動作してくれた。

HTTP_PROXY=http://joe:opensesami@proxy.example.com:8080

余談だけど、僕はFastladderのWindows版で遊んでいて、修正はすぐに反映されなかった。

ちょっと悩んだのだけど、Windows版はFastladderのWebサーバプロセスが自動的にサービスに追加されるようになっていて、サービスの再起動が必要だったみたい。[コントロールパネル]-[管理ツール]-[サービス]で「Fastladder」というサービスを再起動する。

あとはクローラ側を直せば、すべてOKなのかな?クローラ内で「URI::HTTP::find_proxy」したらエラーになったみたいで、よく分からないんだよな。まあボチボチやろう。

Tags : ruby fastladder

Tumblr » powered Sid05 » templated