Rubyのnet/httpを使ってbasic認証を突破したいです。
basic認証を実装したアプリをherokuでアップしたのでこちらのサーバーを相手とします。
認証は userとidです。
require 'open-uri' require 'net/http' params = {'deviceToken' => 'hoge', 'email' => '僕のあどれす','pwd' => 'マイパスワード','type'=>'normal'} url = URI.parse('http://www.hogehoge.api') req = Net::HTTP::Post.new(url.path) req.basic_auth 'basic認証ID', 'basic認証パス' req.set_form_data(params) res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) } case res when Net::HTTPSuccess, Net::HTTPRedirection p "OK" p res.body else res.value end
こちらを参考に作っています。
それで作ったコードがこちら
ruby
1require 'net/http' 2require 'uri' 3url = URI.parse('https://young-refuge-27377.herokuapp.com/') 4request = Net::HTTP::Post.new(url.path) 5request.basic_auth('user','id') 6http = Net::HTTP.new("young-refuge-27377.herokuapp.com",443) 7http.use_ssl = true #SSL通信をするため 8http.verify_mode = OpenSSL::SSL::VERIFY_NONE#SSL通信をするため 9a = http.request(request) 10puts a.code 11
こちらの実行結果で404が返ってきます。
質問1
実行すると404が返ってくるのですがなぜでしょうか?
送るメソッドが間違っているからでしょうか。
仮に送るメソッドが間違っていたんだとしても
どうやればメソッドをしてすることができますか?
リファレンスをみる限り
requestメソッドの引数の中にメソッドを指定するような場所もない
と思うのですが・・・。
質問2
自分が参考にしたサイト
のコード
require 'open-uri' require 'net/http' params = {'deviceToken' => 'hoge', 'email' => '僕のあどれす','pwd' => 'マイパスワード','type'=>'normal'} url = URI.parse('http://www.hogehoge.api') req = Net::HTTP::Post.new(url.path) req.basic_auth 'basic認証ID', 'basic認証パス' req.set_form_data(params) res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) } case res when Net::HTTPSuccess, Net::HTTPRedirection p "OK" p res.body else res.value end
requestメソッドの引数(data)には
リファレンスによると
リクエストのボディを文字列で与えます。
上記のものを与えるとあるのですが
このリクエストのボディが指しているのは
Authorization: Basic dXNlcjppZA==
このようなヘッダーのことですか?
質問3(2が合っていたら)
require 'open-uri' require 'net/http' params = {'deviceToken' => 'hoge', 'email' => '僕のあどれす','pwd' => 'マイパスワード','type'=>'normal'} url = URI.parse('http://www.hogehoge.api') req = Net::HTTP::Post.new(url.path) req.basic_auth 'basic認証ID', 'basic認証パス' req.set_form_data(params) res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) } case res when Net::HTTPSuccess, Net::HTTPRedirection p "OK" p res.body else res.value end
ここで
Net::HTTP::Postクラスを使っていますが
わざわざNet::HTTP::Postクラスのbasic_authメソッドを使わなくても
requestの引数に直接
Authorization: Basic dXNlcjppZA==
上記のbasic認証のためのヘッダーを渡してもいけるのでしょうか?
分からないのでお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/01 07:47
2019/08/01 08:03
2019/08/01 08:08
2019/08/01 08:10
2019/08/01 08:21
2019/08/01 08:24
2019/08/01 08:29