毎日学習記録 9/3 Fradayのパス指定でエラー

Share on:

概要

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