2009-03-31 4 views
7

Следующий код не работает с исключительным случаем с 400 ошибками. Мое сетевое соединение хорошее, и я могу пойти на сайт, но я не могу получить этот uri с HttpWebRequest.Почему мой HttpWebRequest Return 400 Плохой запрос?

private void button3_Click(object sender, EventArgs e) 
{ 
    WebRequest req = HttpWebRequest.Create(@"http://www.youtube.com/"); 
    try 
    { 
     //returns a 400 bad request... Any ideas??? 
     WebResponse response = req.GetResponse(); 
    } 
    catch (WebException ex) 
    { 
     Log(ex.Message);     
    } 
} 
+0

Это asp.net или форма для окон? – eglasius

ответ

13

Во-первых, бросить WebRequest к HttpWebRequest, как это:

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@"http://www.youtube.com/"); 

Затем добавьте следующую строку кода:

req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 
+0

Это работает как чемпион! – user74373

3

Может быть, у вас есть прокси-сервер работает, и вы не установили прокси-свойство объекта HttpWebRequest?

+0

Хорошая догадка. Это внутреннее значение прокси, которое я пишу. – user74373

4

Это может быть много причин для этой проблемы. У вас есть более подробная информация о WebException?

Одна из причин, с которой я столкнулся раньше, заключается в том, что у вас есть строка с плохим пользовательским агентом. Некоторые веб-сайты (например, Google) проверяют, что запросы поступают от известных агентов пользователя, чтобы предотвратить автоматическое использование ботов на своих страницах.

На самом деле вы можете проверить, что пользовательское соглашение на YouTube не препятствует вам выполнять то, что вы делаете. Если это так, то то, что вы делаете, может быть лучше достигнуто путем прохождения одобренных каналов, таких как веб-службы.

5

Набор UserAgent и Referer в вашем HttpWebRequest :

var request = (HttpWebRequest)WebRequest.Create(@"http://www.youtube.com/"); 
request.Referer = "http://www.youtube.com/"; // optional 
request.UserAgent = 
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; " + 
    "Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; " + 
    ".NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; " + 
    "InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)"; 
try 
{ 
    var response = (HttpWebResponse)request.GetResponse(); 
    using (var reader = new StreamReader(response.GetResponseStream())) 
    { 
     var html = reader.ReadToEnd(); 
    } 
} 
catch (WebException ex) 
{ 
    Log(ex); 
} 
+0

Я предлагаю использовать Debug.WriteLine (ex.ToString()), поэтому он получает все исключение, а не только сообщение. –

+0

@ Джон, это делает –

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

  • Нет связанных вопросов^_^