Net::HTTP

Net::HTTPでbodyにデータつめるときはset_form_data使ったほうがいいよ!

OAuthの認証エラーで2日はまった原因がNet::HTTP.post(url, body, header)につめるデータが違っていたせいだった。

set_form_dataの例

 request = Net::HTTP::POST.new(path, headers)
 request.set_form_data({"content"=>"hoge"})

こんな感じでつかえばいい。
set_form_dataの中身はこんな感じ。

    def set_form_data(params, sep = '&')
      self.body = params.map {|k, v| encode_kvpair(k, v) }.flatten.join(sep)
      self.content_type = 'application/x-www-form-urlencoded'
    end


    def encode_kvpair(k, vs)
      Array(vs).map {|v| "#{urlencode(k.to_s)}=#{urlencode(v.to_s)}" }
    end

かゆいとこに手が届く感じがいいんです!