昨日の続きでもある。
hatenaapigraph 0.1.1 にあわせて HTTP_PROXY=proxy:8080 としたら wget が動かなくなった。Ruby の open-uri もダメ。
^o^ >echo %HTTP_PROXY% proxy:8080 ^o^ >type get_diary.rb require 'open-uri' puts open("http://d.hatena.ne.jp/takatoh/"){|f| f.read } ^o^ >ruby get_diary.rb C:/usr/ruby/lib/ruby/1.8/open-uri.rb:203:in `open_http': Non-HTTP proxy URI: pro xy:8080 (RuntimeError) from C:/usr/ruby/lib/ruby/1.8/open-uri.rb:626:in `buffer_open' from C:/usr/ruby/lib/ruby/1.8/open-uri.rb:164:in `open_loop' from C:/usr/ruby/lib/ruby/1.8/open-uri.rb:162:in `catch' from C:/usr/ruby/lib/ruby/1.8/open-uri.rb:162:in `open_loop' from C:/usr/ruby/lib/ruby/1.8/open-uri.rb:132:in `open_uri' from C:/usr/ruby/lib/ruby/1.8/open-uri.rb:528:in `open' from C:/usr/ruby/lib/ruby/1.8/open-uri.rb:30:in `open' from get_diary.rb:3
どちらも HTTP_PROXY=http://proxy:8080/ なら問題なく使える。
「環境変数 HTTP_PROXY」でググってみたけど,”http://” を含めてるのと含めてないのと両方あるな。いったいどうしろっていうんだ。
せっかく簡潔になった Pragger の puglis::hatena_graph.rb だけど結局メソッドを再定義して対処した。”http://” がついてたら取り除く。
## Post a data to Hatena Graph ## ## require gem `hatenaapigraph' 0.1.1 or later. ## ## - module: publish::hatena_graph ## config: ## user_id: your-hatena-user-id ## password: your-password ## graph_name: the-name-of-graph begin require 'rubygems' rescue LoadError end require 'hatena/api/graph' module Hatena::API class Graph private def http_post(url, params, headers) req = ::Net::HTTP::Post.new(url.path, headers) req.form_data = params req.basic_auth url.user, url.password if url.user proxy_host, proxy_port = (ENV['HTTP_PROXY'] || '').sub(/^http:\/\//, '').split (/:/) ::Net::HTTP::Proxy(proxy_host, proxy_port.to_i).start(url.host, url.port) {|ht tp| http.request(req) } end end end def hatena_graph(config, data) value = data.first.to_f graph = Hatena::API::Graph.new(config['user_id'], config['password']) graph.post(config['graph_name'], Time.now, value) end
ども、Hatena::APi::Graph を作っているものです。
その方法でも結局 proxy に認証がかかっていてユーザ名/パスワードが必要な場合は対処できないため、
proxy のインスタンスを設定できるようにして新バージョンをリリースしました。
graph.proxy = Net::HTTP::Proxy(host,port,user,pass)
でお使いください。
あーなるほど,proxy の認証については頭にありませんでした。修正,ありがとうございます。