2016-06-16 8 views
1

私はTyphoeusを例にしていますが、コードはRubyの中にあってもかまいません。 - 動画、HTML、画像、 何Rubyでhttpリクエストを削除することは可能ですか?

http://example.com/somerandomstringwithoutextension 
  1. URLがどのコンテンツタイプのものとすることができる。このようになり10000件のURLがあると仮定します。
  2. 速度とメモリ効率のために、htmlドキュメントを読み込んで残りの部分を無視するだけです。

5 GBビデオで次のコードを実行すると、ビデオ全体をメモリに読み込もうとするため、アプリケーションがクラッシュします。

res = Typhoeus::Request.new(url, timeout: 15, followlocation: true).run 

私はすべての単一のURLにHEAD要求を行う場合は、最初に、コンテンツタイプおよびコンテンツのサイズが、それはメモリの問題に役立つのですかを決定するが、それはほぼ2倍の時間(ヘッド要求のための0.7秒かかります実際のリクエストでは0.7)

Rubyでhttpリクエストを行う方法はありますか?現在、コンテンツサイズが転送されていることを確認し、一定の限度に達したらドロップしますか?例えば。 5 MBより大きい場合は削除要求を送信しますか?あるいは、content-typeに基づいてドロップすることもできます。

答えて

2

可能かもしれませんが、複雑です。

HTTP/1.1 specによれば、実際には「部分的なGET」があります。

リクエストメッセージにRangeヘッダーフィールドが含まれている場合、GETメソッドのセマンティクスが「部分的なGET」に変更されます。部分的なGETは、 14.35節で説明されているように、エンティティの一部だけが転送されるように を要求します。部分GETメソッドは、クライアントが既に保持しているデータを転送することなく、部分的に取得されたエンティティを完了させることによって、不要なネットワーク使用を減らすことを目的としています。

「部分的なGET」を発生させるためにRangeヘッダーフィールドを指定できますが、サーバーがそれをサポートしているかどうかによって異なります。また、Typhoeusクライアントが部分的なGETをサポートしているかどうかは疑問ですが、これを達成するにはNet::HTTPを使用する必要があり、どちらかが達成可能かどうかはわかりません。

私はあなたが元の計画に固執することをお勧めします:まずHEAD、次にGET、それは 'HEAD'が設計されているからです。

HEADメソッドは、サーバーが応答内にメッセージ本体を返さなければならないことを除いて、GETと同じです。ヘッダー要求に応答して、HTTPヘッダーの を含むメタ情報は、GET要求に応答して送信された情報に同じ と同じである必要があります(SHOULD)。この方法は、 要求によって暗示されたエンティティに関するメタ情報をエンティティ本体自体を転送することなく取得するために使用することができる( )。このメソッドは、有効性、アクセシビリティ、 および最近の変更についてハイパーテキストリンクをテストするためによく使用される です。

+0

私は1時間この情報を掘り下げてきましたが、これははるかに最も徹底的な答えです。ありがとうございました。 'HEAD'それから' GET'それはです。 – MothOnMars

関連する問題