页面载入中......
首页 联系我 返回顶部
前天发过这样一篇日志
http://www.lemongtree.com/zh-cn/item,485.aspx

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

当然
上面的代码的执行成功并不一定代表是cookie的问题
也许是其它我尚未查出的问题。

baidu挂了,测试也无法进行了~~~~~~~~~~

4 Responses

收起评论
  1. TakWai 九月 12 2006 , 19:47, #1
    TakWai
    加一个User-Agent看看。应该可以的
  2. 幻想曲 九月 12 2006 , 19:53, #2
    幻想曲
    Re:TakWai
    曾试过把抓包抓来的所有http header信息加进来
    去掉cookie项后就失败
    加上cookie去掉其它的就行
    不过
    明天可以好好试一下
    毕竟这样获取cookie是很耗时的。
  3. TakWai 九月 14 2006 , 00:11, #3
    TakWai
    之前我读取Google News Rss时候,也出现过403的错误,后来检查了,才知道要加上User-Agent。

    噢…我刚才试了下Baidu News,没加User-Agent也正常,不过我是用ASP的XMLHTTP[em10] .Net不怎么会,呵呵
  4. 幻想曲 九月 14 2006 , 09:50, #4
    幻想曲
    Re:TakWai
    .Net中也可以用XMLHTTP,但一般不那样用
    都是用HttpWebRequest或是WebRequest类

Write a comment:



(将显示你的Gravatar图标)  



[b][/b] - [i][/i] - [u][/u]- [quote][/quote]

:-/ ^_^ :d :o :kiss: :) :p :se: [yeah] :( :love: :han: :up: :cry: :zzz: o_o

暂时停止交换链接.

评论提交有问题?