以下代码因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);
}
}
答案 0 :(得分: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)";
答案 1 :(得分:5)
在 HttpWebRequest 中设置 UserAgent 和 Referer :
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);
}
答案 2 :(得分:4)
这个问题可能有很多原因。你有关于WebException的更多细节吗?
我之前遇到的一个原因是你有一个糟糕的用户代理字符串。某些网站(例如谷歌)会检查请求是否来自已知用户代理,以防止自动机器人点击他们的网页。
事实上,您可能需要检查YouTube的用户协议是否排除了您正在执行的操作。如果确实如此,那么通过Web服务等批准的渠道可以更好地完成您的工作。
答案 3 :(得分:3)
也许您已经运行了代理服务器,而您还没有设置HttpWebRequest的Proxy属性?