运行后总是返回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();
}
}
}
#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();
}
}
}