我们有一个工具可以检查给定的网址是否为实时网址。如果给定的网址是实时的,我们软件的另一部分可以屏蔽其中的内容。
这是我检查网址是否有效的代码
public static bool IsLiveUrl(string url)
{
HttpWebRequest webRequest = WebRequest.Create(url) as HttpWebRequest;
webRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5";
webRequest.CookieContainer = new CookieContainer();
WebResponse webResponse;
try
{
webResponse = webRequest.GetResponse();
}
catch (WebException e)
{
return false;
}
catch (Exception ex)
{
return false;
}
return true;
}
此代码完美无缺,但对于在apache上托管的特定网站,我收到了一个带有以下消息的Web异常。 “远程服务器返回错误:(403)禁止” 在进一步检查时,我在WebException对象
中找到了以下详细信息状态= “ProtocolError” StatusDescription =“不良行为”
这是请求标题“User-Agent:Mozilla / 5.0(Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6)Gecko / 20060728 Firefox / 1.5 主持人:scenicspares.co.uk 联系:保持活力“
这是响应标题“Keep-Alive:timeout = 4,max = 512 连接:保持活力 转移编码:分块 内容类型:text / html 日期:2011年1月13日星期四,格林威治标准时间10:29:36 服务器:Apache“
我在vs2008中使用手表提取了这些标题。正在使用的框架是3.5。
答案 0 :(得分:14)
原来,我需要做的就是关注
webRequest.Accept = "*/*";
webResponse = webRequest.GetResponse();
它已修复。
答案 1 :(得分:0)
我相信有很多类似的问题依赖于服务器应用程序。在我的特定情况下,请参阅:The remote server returned an error: (403) Forbidden
答案 2 :(得分:0)
在面对这个问题一整天后,我修复了我的网络抓取应用程序,希望它可以帮助其他人:
public static string GetPageContent(string url)
{
CookieContainer cookieContainer = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.CookieContainer = cookieContainer; // after Create() method
request.AllowAutoRedirect = true; // should be true
request.UserAgent= ".NET Framework Test Client"; // should not be null
var responseStr = string.Empty;
using (var response = request.GetResponse())
{
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
responseStr = reader.ReadToEnd();
reader.Close();
dataStream.Close();
}
return responseStr;
}