railsでhttpsのapiを取得する機能を作成したいと思っています。
indexのページにデータを取得したいと考えています。
ただ現状だと
use_ssl value changed, but session already started
と表示されてしまいます。この場合どうすればよいでしょうか?
参考にしたサイト
http://jumtech.hatenablog.jp/entry/2016/08/20/140720
http://qiita.com/mogulla3/items/a4bff2e569dfa7da1896
よろしくお願いいたします
controller
require 'net/https' require 'uri' require 'json' require 'logger' before_action :set_product, only: [:show, :edit, :update, :destroy] # GET /products # GET /products.json def index @products = Product.all .category_id(params[:category_id]) .page(params[:page]) @order_item = current_order.order_items.new # [ロガー] # カレントディレクトリのwebapi.logというファイルに出力 logger = Logger.new('./webapi.log') params = URI.encode_www_form({token: '0806af222da69296d9b5869b1374381466ae31f9'}) uri = URI.parse("https://www.sakenote.com/api/v1/sakes?#{params}") # @query = uri.query # [GETリクエスト] # Net::HTTP.startでHTTPセッションを開始する # 既にセッションが開始している場合はIOErrorが発生 response = Net::HTTP.start(uri.host, uri.port) do |http| # Net::HTTP.open_timeout=で接続時に待つ最大秒数の設定をする # タイムアウト時はTimeoutError例外が発生 # http.open_timeout = 5 # Net::HTTP.read_timeout=で読み込み1回でブロックして良い最大秒数の設定をする # デフォルトは60秒 # タイムアウト時はTimeoutError例外が発生 # http.read_timeout = 10 http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_NONE # Net::HTTP#getでレスポンスの取得 # 返り値はNet::HTTPResponseのインスタンス http.get(uri.request_uri) end begin # [レスポンス処理] # 2xx系以外は失敗として終了することにする # ※ リダイレクト対応できると良いな.. # # ステータスコードに応じてレスポンスのクラスが異なる # 1xx系 => Net::HTTPInformation # 2xx系 => Net::HTTPSuccess # 3xx系 => Net::HTTPRedirection # 4xx系 => Net::HTTPClientError # 5xx系 => Net::HTTPServerError case response # 2xx系 when Net::HTTPSuccess # [JSONパース処理] # JSONオブジェクトをHashへパースする # JSON::ParserErrorが発生する可能性がある @sake = JSON.parse(response.body) @sakename = JSON.parse(response.body)["sakes"][0]["sake_name"] # 3xx系 # when Net::HTTPRedirection # リダイレクト先のレスポンスを取得する際は # response['Location']でリダイレクト先のURLを取得してリトライする必要がある # logger.warn("Redirection: code=#{response.code} message=#{response.message}") # else # logger.error("HTTP ERROR: code=#{response.code} message=#{response.message}") end # [エラーハンドリング] # 各種処理で発生しうるエラーのハンドリング処理 # 各エラーごとにハンドリング処理が書けるようにrescue節は小さい単位で書く # (ここでは全て同じ処理しか書いていない) rescue IOError => e logger.error(e.message) rescue TimeoutError => e logger.error(e.message) rescue JSON::ParserError => e logger.error(e.message) rescue => e logger.error(e.message) end end
view
<%= @sakename %>

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/26 09:50