質問: URI.parse(uri) Net::HTTP.new(url.host).get(url.path, {"User-Agent": agent}) rescue return false else return true end end puts url_exist?("http://blog.nogizaka46.com/karin.itou/?d=20180512") puts url_exist?("http://blog.nogizaka46.com/karin.itou/?d=20180000") ``` これだと、"?d=~"の値がどんなものでも、trueが返ってきてしまいました。 リダイレクトした先のURLを取得する['location']も試してみたのですが、中身は空となってしまいます。 どうにかして、リダイレクト先のURLを取得するか、falseが取得できるようにしたいです。 どのようにすればいいでしょうか? お知恵をお貸しいただけると幸いです。
回答: 質問に掲載のコードを実行するとどちらの場合も `200 OK` が返されるでしょう。なぜなら、`get(url.path)`としているため実際のリクエストには指定のURLの`?`以降のクエリは含まれていないためです。(その為どちらも同じページをリクエストしています) ``` Net::HTTP.new(url.host).get(url.path) ``` を ``` Net::HTTP.new(url.host).get(url.request_uri) ``` で置き換えることでその問題は解決できるかと思います。 (もちろんどちらの場合も例外は投げられないのでそこだけ変えても意図した動作にはならないと思いますが、問題はそこのようです。)