こんにちは!kossyです!
さて、今回はcurlでproxyを設定したくなるシチュエーションに出会ったので、
ブログに残してみたいと思います。
困った
Rails APIモードでAPIサーバーを開発しているときに、リクエスト元のIPアドレスを保存する要件がありました。
そこで、以下のようにモデルにバリデーションを設けました。
require 'resolv' validates :ip_address, presence: true, format: { with: Resolv::IPv4::Regex }
この場合、proxyを設定せずにリクエスト元のIPアドレスをremote_ipメソッドで取得しようとすると、
IPアドレスのフォーマット外の::1という値が返るので、バリデーションに弾かれてしまいます。
このままだとローカル環境でAPIの動作確認ができなくなるので、
curlでproxyを設定してリクエストを送ることにしました。
curl localhost:3000/auth/sign_in -X POST -d '{"email":"test1@gmail.com", "password":"test1234"}' -H "content-type:application/json" -i --proxy http://127.0.0.1:3000
-
- proxyオプションの後に、URLを渡すことでproxyを設定することができます。
これで動作を確認してみます。
# binding.pryでデバッグしている想定 request.remote_ip => "127.0.0.1"
きちんとproxyの設定ができていることが確認できました。