【ruby】net/httpを使ってPOSTでJSON投げる時、httpリクエストヘッダを追加して通信はhttps


Net http ruby

すごい長い名前になってしまいましたが、まぁタイトルの通りの事をしたかったのであります。
良く使うnet/httpだけどこれだけてんこ盛りだったらメモしておけば後で自分用に参照できると思いPOST。

ソース

そういえばバージョンによって挙動少しちゃうみたいですね。
今回はruby2.0.0でやんす。

1:httpsで通信したい

Net::HTTP.use_sslというのがあるそうです。
booleanで指定する

URL = 'https://hogehoge.com/api'
uri = URI.parse(URL)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true

 

2:POST投げたい

req = Net::HTTP::Post.new(uri.request_uri)
data = "PostData"
req.body = data

今回はjsonを投げるので、dataに対してJSONを突っ込んだたけです。 to_jsonが簡単でよろしいようです。

jsonで投げるのでリクエストヘッダのContent-Typeを適切に指定しないとサーバー側の設定ではエラーになるかと。(てか、気づかなくてめっちゃハマった)

 

3:httpリクエストヘッダ追加(編集)したい

req = Net::HTTP::Post.new(uri.request_uri) #があるとして
req["Content-Type"] = "application/json"
req["Authorization"] = access_token

とかとか

まとめ

# coding: utf-8
require ’net/http'
require ‘uri'

uri = URI.parse(URL)
https = Net::HTTP.new(uri.host, uri.port)

https.use_ssl = true # HTTPSでよろしく
req = Net::HTTP::Post.new(uri.request_uri)

req["Content-Type"] = "application/json” # httpリクエストヘッダの追加
payload = {
     “query" => “3時間のMCハマー",
     "lang" => “jp"
}.to_json
req.body = payload # リクエストボデーにJSONをセット
res = https.request(req)

# 返却の中身を見てみる
puts "code -> #{res.code}"
puts "msg -> #{res.message}"
puts "body -> #{res.body}"

通信のデバッグ

リクエストなげる時に実際どんなHTTPリクエストヘッダが飛んでいるのかキャプチャしたい時、あると思います。
今まで下記のメソッドが用意されている事を知らなくて、TCPdumpしそうになったりしました。

https.set_debug_output $stderr

で、コンソールに出力できました。
なぜ$stderrに向けるのかは知りませんが、stackoverflowに書いてあった。

おわり

来年は絶対rubyシルバーをとりたいでやんす

 

2014-12-11 | Posted in RubyNo Comments » 


関連記事

Comment





Comment



*