Почему мой HttpWebRequest Возвращает 400 Неверных запросов?
-
22-08-2019 - |
Вопрос
Следующий код завершается ошибкой с 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);
}
}
Решение
Сначала приведите веб-запрос к 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)";
Другие советы
Установить Агент пользователя и Референт в вашем Запрос 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);
}
У этой проблемы может быть много причин.Есть ли у вас какие-либо дополнительные сведения о WebException?
Одна из причин, с которой я сталкивался раньше, заключается в том, что у вас неправильная строка пользовательского агента.Некоторые веб-сайты (например, Google) проверяют, поступают ли запросы от известных пользовательских агентов, чтобы предотвратить попадание автоматизированных ботов на их страницы.
На самом деле, вы можете захотеть проверить, что пользовательское соглашение с YouTube не запрещает вам делать то, что вы делаете.Если это так, то то, что вы делаете, может быть лучше выполнено с помощью утвержденных каналов, таких как веб-службы.
Может быть, у вас запущен прокси-сервер, и вы не установили свойство Proxy для HttpWebRequest?