您的位置:首页 > 理论基础 > 计算机网络

HttpWebRequest获取百度的网页

2007-06-26 02:49 465 查看
运行后总是返回403错,这是远程主机强制关闭了连接
按照上文朋友样的评论,用WebRequest改成HttpWebRequest还是出现403
看来的确是BaiDu服务器终止了连接
抓包后发现,请求百度是在Header中有一段Cookie
是不是没有该cookie时baidu就会终止连接?
于是先请求一次news.baidu.com用工具获取它的cookie
在程序中加入该cookie,果然成功!而且未出现过错误
于是,修改了源代码:

request = (HttpWebRequest)WebRequest.Create(url);
#region start
HttpWebResponse response = null;
try
{
try
{
response = (HttpWebResponse)request.GetResponse(); //在这里可能出错,因为没有cookie
}
catch (WebException exp)
{
if (exp.Status == WebExceptionStatus.ProtocolError)
{
HttpWebRequest request_baidu = (HttpWebRequest)WebRequest.Create("http://news.baidu.com/"); //通过访问news.baidu.com获取一个cookie
using (HttpWebResponse response_baidu = (HttpWebResponse)request_baidu.GetResponse())
{
string str = response_baidu.Headers["Set-Cookie"];
baidu_cookie = str.Split(';')[0]; //得到cookie
request = (HttpWebRequest)WebRequest.Create(url);
request.Headers.Add(HttpRequestHeader.Cookie, baidu_cookie); //再次Create原始搜索地址,并加入cookie
response = (HttpWebResponse)request.GetResponse();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: