2016-09-18 8 views
1

У меня есть метод загрузки для протокола HTTP. Но кажется, что он работает неправильно, что-то не так. Я тестировал его с некоторыми источниками URL, и это было правильно, за исключением последнего. Свойство ContentLength неверно для URL-адреса. Он показан как 210 кб во время выполнения, но на самом деле это 8 МБ. Я покажу его, разделив мой код. Как это исправить?HttpWebResponse неверен для ContentLength

Код:

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

Я думаю, что вы не можете открыть URL таким образом (с HttpWebRequest).

если вы пытаетесь получить текст ответа:

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()); 
    } 

Вы будете получать этот ответ:

<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> 

Вы должны установить UserAgent, чтобы иметь возможность получить полный ответ. Пример:

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', потому что он ждет загрузки файла. Настройка «UserAgent» лучше и может вернуть правильный размер. И наконец, работает ли этот файл Mozilla 'UserAgent' для всех источников Http? Потому что мне нужно, чтобы это было обобщено. Спасибо @Quentin. –

+1

Да, этот пользовательский агент будет работать со всеми http-источниками. (Если URL-адрес может быть доступен со стандартным браузером) –

+0

Спасибо за быстрый ответ sir! Прекрасный ответ –

Смежные вопросы