最近在网上看了点文章,利用网上的代码写了个摄取指定网页部分内容的小类,可是后面发现有很怪事,这个小类是根据提供的地址返回string 类型的数据,但是在不同机器上返回的错误不一样.
实现方法大致是这样的:
用HttpRequest和HttpResponse来得到指定页的本文,
GetHtml()
            httpWebRequest = (HttpWebRequest)WebRequest.Create(Url);
            httpWebRequest.Method = "Get";
            httpWebRequest.ContentType = "application/x-www-form-urlencoded";
            httpWebRequest.Timeout = int.MaxValue;
            httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            GetStream = httpWebResponse.GetResponseStream();
            GetRead = new StreamReader(GetStream, Encoding.GetEncoding("GB2312"));
            while ((LineStr = GetRead.ReadLine()) != null)
            {
                HtmlCode += LineStr;
            }
......
分析文本过滤掉部分无用的代码,得到自己想要的部分
......
然后再利用WebBrowser控件得到一个HtmlDocument对象,再用它来查找表格里的内容返回它的InnerText            WebBrowser WB = new WebBrowser();
            WB.DocumentText = GetHtml(DomainName, DomainType, CharEode);
            HtmlDocument HDocument =WB.Document;
           // HDocument.Write(WB.DocumentText);
            HDocument.Write(GetHtml(DomainName, DomainType, CharEode));            HtmlElementCollection HEC = HDocument.GetElementsByTagName("tr");
            foreach (HtmlElement HE in HEC)
            {
                Seach=HE.GetElementsByTagName("td")[0].InnerText;            }
            return Seach;
  
在我的机器上 我用WinForm 将返回值给一个RichBox 可以得到正确的内容.但是我在WebForm里调用这个类调却提示我:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。
行 278:  WebBrowser WB = new WebBrowser();这一行不对.我又把这个WebForm和WinForm 放到了一台另一台机子上运行,WebForm和WinForm则都提示错误"无法解析远程主机名称:www.*.com".看看大家谁给我分析一下吧这个为什么?是不是WebBrowser只能用在WinForm 中?我在本地WinForm调用正常,可以在另一台机上却不行,WebForm上说WebBrowser WB = new WebBrowser();这不对,那能不能不通过WebBrowser得生一个HDocument单独建立一个对象?我用HDocument HD=new HDocument() 说没有构造函数.不知道大家有没有更好办法得到网页指定的.或者帮我分析一下这是什么错误.还有一个很怪事情我以前写了一个查询域名的类,在WebForm和WinForm 都调用运行正常,可是最近这个不能用了,就一直很怪,从我开始写一直到完,不论是在WebForm和WinForm上在我用的机器上都无法正常运行,就是报空连接错误.而在另一台机子上却是正常的,按理应该不会出现这样的问题吧,我也没怎么想,但是现在在那台机子上域名查询也不能用了,
               
 TcpClient tcpclient = new TcpClient();
                try
                {
                    tcpclient.Connect(WhoisServer, 43);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                   // return;
                }我用这个测试错误在我机器上提示,连接对方一段时间没有响应,在另一台机上提示 没有这样的主机.我在一个局域网里访问的网络的,是不是和服务器有关系呢,怎么需要创建网络连接的都有问题呢?
下面是两个Whois服务器,
whois.internic.net
cwhois.cnnic.cn哪位朋友看看帮我测试一下,是不是真的不能连上了,我这儿是不行了.真是实在没折了,大家多帮忙啊....小弟先多谢了.

解决方案 »

  1.   

    不要用WebBrowser啊:
        string html=GetHtml();
        IHTMLDocument2 doc = new HTMLDocumentClass ();
        doc.write (new object [] { html });
        doc.close ();
       /* foreach (IHTMLAnchorElement anchor in doc.anchors)
    {
    ...
    }*/
    你也可以转换成HTMLDocument
    然后查找元素
    HTMLDocument doc0=(HTMLDocument)doc;foreach(IHTMLElement he in doc0.getElementsByTagName("tr"))
    {
    ...
    }
      

  2.   

    httpWebRequest.Timeout = int.MaxValue;=======================================
    你设置的超时够长的
      

  3.   

    但是我在WebForm里调用这个类调却提示我:当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96b-00c04fd705a2”。
    ==========================================================
    web form 调用单线程单元的com组件,需要设置页面<@ Page >指令中的 ASPCompat 为 True