2016-11-17 6 views
3

私はHttpWebResponse.GetResponse();を使用しようとしましたが、それは.NETコアの一部ではありません。.NETコアでファイルを1行ずつダウンロードするにはどうしたらいいですか?

私は今のところこれを持っているが、これは、私は、ファイルの残りの部分なしで最初の行のみをダウンロードしたいファイル全体

string first_line(string url) 
{ 
    var httpClient = new HttpClient(); 
    httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MyClient", "1.0")); 
    var otp = httpClient.GetStringAsync(url); 

    return imaginary_first_line; 
} 

をダウンロードします。

+0

コメントは議論の対象外です。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/129168/discussion-on-question-by-dx-tdas-how-can-i-download-file-line-by-ラインインネットC)。 – Flexo

答えて

3

解決策は、範囲ヘッダーを使用することです。それは、私たちがファイルの部分だけに興味を持っているサーバーを示しています。

using (var client = new HttpClient()) 
{ 
    var request = new HttpRequestMessage(HttpMethod.Get, url); 
    //Let's read only 50 bytes 
    request.Headers.Range = new RangeHeaderValue(0, 50); 

    using (var response = await client.SendAsync(request)) 
     using (var stream= await response.Content.ReadAsStreamAsync()) 
     { 
     //The buffer can store 1000 bytes but only 50 will be send from the server 
     var buffer = new byte[1000]; 
     stream.Read(buffer, 0, 1000); 
     //... 
     } 
} 

実際にサーバーが50バイトしか返さないことを確認するために、Fiddlerを使用できます。また、次のようにのHttpWebRequestクラス使用することができます

var request = (HttpWebRequest)WebRequest.Create(url); 
request.Headers[HttpRequestHeader.Range] = "bytes=0-50"; 

var response = await request.GetResponseAsync(); 
//... 

を結果は同じでなければなりません。