为什么我的HttpWebRequest返回400 Bad请求?

以下代码因400错误请求exception而失败。 我的网络连接很好,我可以去网站,但我不能用HttpWebRequest得到这个uri。

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

首先,将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)"; 

HttpWebRequest中设置UserAgentReferer

 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的更多细节吗?

我之前遇到的一个原因是你有一个糟糕的用户代理字符串。 某些网站(例如谷歌)检查请求是否来自已知的用户代理,以防止自动机器人点击他们的网页。

实际上,您可能需要检查YouTube的用户协议是否排除了您正在执行的操作。 如果确实如此,那么通过Web服务等批准的渠道可以更好地完成您所做的工作。

也许您已经运行了代理服务器,并且您还没有设置HttpWebRequest的Proxy属性?