Makio Tsukamoto tumblelogging in the mood of sinkin' in the rain.
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:[email protected]:8080
余談だけど、僕はFastladderのWindows版で遊んでいて、修正はすぐに反映されなかった。
ちょっと悩んだのだけど、Windows版はFastladderのWebサーバプロセスが自動的にサービスに追加されるようになっていて、サービスの再起動が必要だったみたい。[コントロールパネル]-[管理ツール]-[サービス]で「Fastladder」というサービスを再起動する。
あとはクローラ側を直せば、すべてOKなのかな?クローラ内で「URI::HTTP::find_proxy」したらエラーになったみたいで、よく分からないんだよな。まあボチボチやろう。