環境変数 HTTP_PROXY の値には ”http://” を含むのか含まないのか

昨日の続きでもある。

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
カテゴリー: Ruby パーマリンク

2 Responses to 環境変数 HTTP_PROXY の値には ”http://” を含むのか含まないのか

  1. secondlife のコメント:

    ども、Hatena::APi::Graph を作っているものです。
    その方法でも結局 proxy に認証がかかっていてユーザ名/パスワードが必要な場合は対処できないため、
    proxy のインスタンスを設定できるようにして新バージョンをリリースしました。
    graph.proxy = Net::HTTP::Proxy(host,port,user,pass)
    でお使いください。

  2. takatoh のコメント:

    あーなるほど,proxy の認証については頭にありませんでした。修正,ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください