C# 为什么我的HttpWebRequest返回400个错误请求?

C# 为什么我的HttpWebRequest返回400个错误请求?,c#,httpwebrequest,C#,Httpwebrequest,以下代码失败,出现400错误请求异常。我的网络连接很好,我可以访问该站点,但我无法通过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

以下代码失败,出现400错误请求异常。我的网络连接很好,我可以访问该站点,但我无法通过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);                
    }
}

可能您已经运行了代理服务器,但尚未设置HttpWebRequest的proxy属性?

导致此问题的原因可能有很多。您有关于WebException的更多详细信息吗

我以前遇到过的一个原因是,用户代理字符串不正确。一些网站(例如谷歌)检查请求是否来自已知的用户代理,以防止自动机器人攻击他们的页面


事实上,您可能需要检查YouTube的用户协议是否阻止您执行您正在执行的操作。如果确实如此,那么通过web服务等经批准的渠道可以更好地完成您的工作。

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

是asp.net还是windows窗体?我建议他使用Debug.WriteLine(例如ToString()),这样他就可以得到整个异常,而不仅仅是消息。猜得好。这是我正在写的代理的内部。