我正尝试使用C#4.0中的WebRequest类下载页面。出于某种原因,此页面将正确返回所有内容,但带有HTTP 500内部错误代码。C#HttpWebRequest忽略HTTP 500错误
Request.EndGetResponse(ar);
当页面返回HTTP 500或404时,此方法抛出WebException。我怎么能忽略这个?我知道它返回500,但我仍然想读取页面/响应的内容。
我正尝试使用C#4.0中的WebRequest类下载页面。出于某种原因,此页面将正确返回所有内容,但带有HTTP 500内部错误代码。C#HttpWebRequest忽略HTTP 500错误
Request.EndGetResponse(ar);
当页面返回HTTP 500或404时,此方法抛出WebException。我怎么能忽略这个?我知道它返回500,但我仍然想读取页面/响应的内容。
使用try
/catch
块,让您的计划,以确保即使抛出异常运行:
try
{
Request.EndGetResponse(ar);
}
catch (WebException wex)
{
// Handle your exception here (or don't, to effectively "ignore" it)
}
// Program will continue to execute
try {
resp = rs.Request.EndGetResponse(ar);
}
catch (WebException ex)
{
resp = ex.Response as HttpWebResponse;
}
您可以在try/catch块捕获异常并做额外的处理通过查看WebExeption类公开的响应对象,发现http 404或500错误。
try
{
response = (HttpWebResponse)Request.EndGetResponse(ar);
}
catch (System.Net.WebException ex)
{
response = (HttpWebResponse)ex.Response;
switch (response.StatusCode)
{
case HttpStatusCode.NotFound: // 404
break;
case HttpStatusCode.InternalServerError: // 500
break;
default:
throw;
}
}
问题是由于未将浏览器详细信息发送到请求网站。 您需要向您要求数据的网站标识自己。
简单的一个用户代理添加到您的代码
request.UserAgent = “Mozilla的/ 5.0(Windows NT的6.1; WOW64; RV:2.0)的Gecko/20100101火狐/ 4.0”;
最终代码应该是这个样子:
HttpWebRequest Request = (HttpWebRequest)WebRequest.Create(http://WEBURL);
Request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0";
try
{
response = (HttpWebResponse)Request.EndGetResponse(ar);
}
catch (System.Net.WebException ex)
{
response = (HttpWebResponse)ex.Response;
switch (response.StatusCode)
{
case HttpStatusCode.NotFound: // 404
break;
case HttpStatusCode.InternalServerError: // 500
break;
default:
throw;
}
}
请找到参考/证明上面的代码中提到: https://msdn.microsoft.com/en-us/library/system.net.webclient(v=vs.110).aspx
这是在链接
提到“”默认情况下,WebClient实例不会发送可选的HTTP标头。如果您的请求需要选项nal标题,您必须将标题添加到Headers集合。例如,要在响应中保留查询,您必须添加一个用户代理标题。此外,如果用户代理标题丢失,服务器可能会返回500(内部服务器错误)。“