2016-09-18 7 views
1

私はHTTPプロトコルのダウンロード方法を持っています。しかし、それは正しく動作しないようですが、何かが間違っています。私はいくつかのURLソースでそれをテストし、それは最後のものを除いて正しいです。 URLにはContentLengthプロパティが間違っています。実行時には210 KBと表示されますが、実際には8 MBです。私は自分のコードを共有することでそれを示します。それを修正するには?ContentLengthのHttpWebResponseが間違っています

コード:

void TestMethod(string fileUrl) 
    { 
     HttpWebRequest req = WebRequest.Create(fileUrl) as HttpWebRequest; 
     HttpWebResponse resp = req.GetResponse() as HttpWebResponse; 
     long contentSize = resp.ContentLength; 

     MessageBox.Show(contentSize.ToString()); 
    } 
    private void TestButton_Click(object sender, EventArgs e) 
    { 
     string url1 = "http://www.calprog.com/Sounds/NealMorseDowney_audiosample.mp3"; 
     string url2 = "http://www.stephaniequinn.com/Music/Canon.mp3"; 

     TestMethod(url1); //This file size must be 8 MB, but it shows up as 210 kb. This is the problem 

     TestMethod(url2); //This file size is correct here, about 2.1 MB 
    } 

答えて

1

私はあなたが(HttpWebRequestので)このように、このURLにアクセスすることを許可されていないと思います。

あなたが応答テキストを取得しようとします

<html><head><title>Request Rejected</title></head><body>The requested URL was rejected. If you think this is an error, please contact the webmaster. <br><br>Your support ID is: 2719994757208255263</body></html> 

あなたは完全な応答を得ることができるようにユーザーエージェントを設定する必要があります。

HttpWebRequest req = WebRequest.Create(fileUrl) as HttpWebRequest; 
    HttpWebResponse resp = req.GetResponse() as HttpWebResponse; 
    using (var streamreader = new StreamReader(resp.GetResponseStream())) 
    { 
     var r = streamreader.ReadToEnd(); 
     long contentSize = r.Length; 
     Console.WriteLine(contentSize.ToString()); 
    } 

あなたはこの応答を得るでしょう。このように:

req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0"; 

この値を設定すると、サーバーはプログラムがFirefoxブラウザであるとみなします。

ように、コードのこれらの数行は、トリックを行う必要があります。

void TestMethod(string fileUrl) 
    { 
     HttpWebRequest req = WebRequest.Create(fileUrl) as HttpWebRequest; 
     req.UserAgent = "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0"; 
     HttpWebResponse resp = req.GetResponse() as HttpWebResponse; 
     long contentSize = resp.ContentLength; 
     Console.WriteLine(contentSize.ToString()); 
    } 

は良い一日を!

+0

正常に動作します。 'StreamReader'は、ファイルがダウンロードされるのを待つので、私は' StreamReader'を好きではありませんでした。 'UserAgent'の設定はより良く、正しいサイズを返すことができます。最後に、このMozillaの 'UserAgent'はすべてのHttpソースに対して機能しますか?私はそれが一般化される必要があるからです。ありがとう@クエンティン。 –

+1

はいこのユーザーエージェントはすべてのhttpソースで動作します。 (URLに標準ブラウザでアクセスできる場合) –

+0

クイック返信ありがとう!細かい答え –

関連する問題