毎日学習記録 9/3 Fradayのパス指定でエラー
概要
Faradayを使うときに、urlのパス部分の一部まで入れる際は注意が必要
内容
FaradayはとてもシンプルなHTTPリクエストをする際に使用するライブラリになります。 基本的な使い方をする分には特に困ることはないのですが、タイトルの通りFaradayのオブジェクトを作る際に、パスまで入れる場合は注意しないと意図しない挙動となるので、忘れないように記載いたします。
検証
Faradayのインストール
gem 'faraday'
実行
実行はrailsコンソールを使うので以下の通り
bundle exec rails c
その後パス付きのFaradayのオブジェクトを作成する
connection = Faraday.new('http://localhost:8000/path')
GETリクエストを送る
res = connection.get '/get_request'
期待値としては、http://localhost:8000/path/get_request
と生成されるはず
irb(main):016:0> res
=> #<Faraday::Response:0x00007f9456a43d40 @on_complete_callbacks=[],
@env=#<Faraday::Env
@method=:get
@url=#<URI::HTTP http://localhost:8000/get_request>
@request=#<Faraday::RequestOptions (empty)>
@request_headers={"User-Agent"=>"Faraday v1.0.1"}
@ssl=#<Faraday::SSLOptions verify=true>
@response=#<Faraday::Response:0x00007f9456a43d40 ...>
・・だが返却値の@urlを見る限りhttp://localhost:8000/get_request
となっており期待通り返却されていない
対処方法
先頭の「/」を抜いてリクエストを送ることで、パスに連結される。
res = connection.get 'get_request'
結果を見る限り、URLもhttp://localhost:8000/path/get_request
となっており、期待値通りになっているのを確認できた。
irb(main):018:0> res
=> #<Faraday::Response:0x00007f9457a885c0 @on_complete_callbacks=[],
@env=#<Faraday::Env
@method=:get
@url=#<URI::HTTP http://localhost:8000/path/get_request>
@request=#<Faraday::RequestOptions (empty)>
@request_headers={"User-Agent"=>"Faraday v1.0.1"}
@ssl=#<Faraday::SSLOptions verify=true>
@response=#<Faraday::Response:0x00007f9457a885c0 ...>
最後に
今回は、謎の現象に当たってとりあえずの解決の状態(というかこの現象については記事が無い・・)ため、一度Faradayの中身をみてみた いと思った。
そもそも、パスの一部まで入れるような特殊なことがあるか不明だが共通化などする場合などは、注意したほうがよいと感じた。
その他
自分がローカルで簡単にhttp serverを用意したいときに使う方法
個人的にPythonが一番簡単なのでオススメ
# pytohn3
pytohn -m http.server
# python2
python -m SimpleHTTPServer