8

以下代码因 400 bad request 异常而失败。我的网络连接良好,我可以访问该站点,但无法通过 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);                
    }
}
4

4 回答 4

14

首先,将 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)";
于 2009-03-31T17:19:46.457 回答
5

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);
}
于 2009-03-31T17:21:43.470 回答
4

这个问题可能有很多原因。你有更多关于 WebException 的细节吗?

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

事实上,您可能需要检查 YouTube 的用户协议是否禁止您做您正在做的事情。如果是这样,那么您正在做的事情可能会通过经过批准的渠道(例如 Web 服务)更好地完成。

于 2009-03-31T17:16:27.180 回答
3

也许你有一个代理服务器正在运行,而你还没有设置 HttpWebRequest 的 Proxy 属性?

于 2009-03-31T17:14:30.383 回答