Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

net/httpsでWebAPIにPOSTリクエストを投げる

More than 5 years have passed since last update.

色々調べてAPIを使ってみた時のメモ書きです。
POSTをする必要があったので、色々と悩ましかったです。

require 'net/https'

class TestController < ApplicationController

  def apipost

    uri = URI.parse("https://example.jp/foo/ber/piyo/1/")
    http = Net::HTTP.new(uri.host, uri.port)

    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE

    req = Net::HTTP::Post.new(uri.path)
    req.set_form_data({'name' => 'hoge', 'content' => 'hogehoge'})

    res = http.request(req)

  end
end

require 'net/https'
今回はhttps通信を使うのでこちらです。
http通信の'net/http'もあります。
library net/https

uri = URI.parse("https://example.jp/foo/ber/piyo/1/")
hostやpathを分けてわたせる様になります。
singleton method URI.parse

http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

http.use_ssl = trueは必ずtrueを指定するようです。
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
は証明書の検証をするかしないかの設定みたいです。今回はしないように指定してます。
【ruby】net/httpでPOSTリクエスト(https)投げてみる。
module OpenSSL::SSL

req = Net::HTTP::Post.new(uri.path)
req.set_form_data({'name' => 'hoge', 'content' => 'hogehoge'})

ここでPOSTの設定をしています。
req.set_form_data({'name' => 'hoge', 'content' => 'hogehoge'})
の部分は状況によって変わると思うのでAPIに合わせてお願いします。
Net::HTTP Cheat Sheet

res = http.request(req)

リクエストを実行して、レスポンスが無事帰ってこれば成功です。

深いJSON

↓文字列をJSONに変換
result = ActiveSupport::JSON.decode(res.body)
↓中身
=> {"a"=>"0",
 "b"=>
  [{"c"=>"0",
    "d"=>
     [{"e"=>"1",
       "f"=>"9",
       "g"=>"1",
       "h"=>"1",
       "i"=>"0",
       "j"=>"0",
       "k"=>"0",
       "l"=>"1",
       "m"=>"0",
       "n"=>"1"}],
    "o"=>
     [{"p"=>"0",
       "q"=>"-1",
       "r"=>"0",
       "s"=>"2"}],
    "t"=>["1"],
    "u"=>"hoge"}]}

初めて見た時はさっぱりわかりませんでした。
文字列"hoge"を取り出したい場合は、
result["b"][0]["u"]としてあげると取り出せます。
この[hash][array][hash]の並びが見えてくるまでひたすら打ち込んでました。

seisonshi
駆け出しバイトエンジニア。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away