Почему мой HttpWebRequest возвращает 400 неверный запрос? - PullRequest
8 голосов
/ 31 марта 2009

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

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

Ответы [ 4 ]

14 голосов
/ 31 марта 2009

Сначала приведите 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)";
5 голосов
/ 31 марта 2009

Set 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);
}
4 голосов
/ 31 марта 2009

Может быть много причин для этой проблемы. Есть ли у вас какие-либо подробности о WebException?

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

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

3 голосов
/ 31 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...