setoya-blog

システム開発技術、データ分析関連でお勉強したことや、山奥生活を綴る、テンション低めなブログです。

RubyでHttpclientを使って、jsonをpostする方法

仕事でAPI用のサーバを用意して、そのAPI用のサーバを別のrailsアプリから叩く、という必要が出てRubyで使えるhttpclientを探した。探していたのはJSONをPOSTのパラメータとして渡すことができて、さらにDigest認証に対応しているライブラリ。

上のうち、一番APIが綺麗に見えたのが、Omniauthの内部とかでも使われているFaradayだったんだけど、残念なことにDigest認証のやり方が見つからなかった。

結局、選んだのはhttpclientで、以下のようにJSONをPOSTしつつ、Digest認証をかけることができる。ちなみに、Railsアプリなので、ActiveSupportのto_jsonとか使っている。これも便利。

#require 'httpclient'が必要

    request_content = {:hoge => 'hoge', :fuga_id => ['test', 'test2', 'test3']}

    http_client = HTTPClient.new
    endpoint_uri = 'http://hogehoge/api/endpoint'
    content_json = request_content.to_json

    http_client.set_auth( endpoint_uri, 'digest_auth_user', 'digest_auth_password')

    http_client.post_content(endpoint_uri, content_json, 'Content-Type' => 'application/json')


公式ドキュメント(rubydoc)
gitのRead MEにはあまりサンプルや使い方が載っていなかったけど、rubydocに結構ちゃんとしたサンプルや使い方が載っていたのでこれを参考にした。