4

ユーザーからURI/URL文字列を取得し、機能する標準形式を判別する方法を見つけようとしています(または、リソースが有効でない場合は失敗します)。同時に、URLが存在することも確認する必要があります。したがって、有効な「構文」と存在の両方をチェックしています。

たとえば、のような文字列google.comはに変換する必要がhttp://www.google.comあり、のような文字列google.com/insightsはに変換する必要がありますhttp://www.google.com/insights。のような文字列http://thiswebsitedoesntexistatall.comは、ある種のエラーまたは例外を返す必要があります。

ソリューションの一部は、HTTPメソッドを呼び出し、ステータスget_response()を取得するまでリダイレクトを追跡している可能性が高いと思います。200 OK

URI.parse()この方法では、を省略してもかまわないようhttpです。前に追加するなどの簡単なものを書けるとは思いhttpますが、URLを本当に寛容にして正規化してくれる既存のgemやあまり知られていないライブラリ関数があることを期待していました。

ビルトインnet/httpHTTParty私が探しているものには厳しすぎるようです。これを行うための良い方法はありますか?

4

1 に答える 1

3

あなたが求めているものにはいくつかの問題があります:

  • FTPと他の多くのプロトコルが同等に有効である場合、URLパーサーは渡される値がHTTPであると想定すべきではありません。プロトコルがHTTPである可能性が高いことがわかっている場合は、プロトコルを追加する必要があります。
  • サイトに接続して200の応答が得られるまでリダイレクトをたどろうとすると、URLが何らかの有効なページに解決されることが証明されただけです。その200は、必要なリンク切れまたは無効であるか、サイトが一時的にダウンしているために返されたエラーページである可能性があります。そうでないことを証明するということは、検索する特定のコンテンツなど、探しているページについてある程度の事前知識が必要であることを意味します。
  • リダイレクトをたどった後でURLが適切であると仮定すると、安全ではありません。多くのサイトはあらゆる種類のセッションデータをURLに追加するため、単純でクリーンなURLとして開始できるものは、長く複雑なURLに解決できます。

Addressable::URIの宝石をご覧になることをお勧めします。これは、RubyのURIよりもはるかにフル機能です。それはあなたのために決定を下すことはありませんが、少なくともそれはあなたにもっと完全なAPIを与え、URLを書き換え/正規化することができます。それらをクリーンアップすること、および/またはそれらが良いかどうかを判断することは、まだあなたのための練習として残されています。

于 2012-07-25T23:49:12.843 に答える