日期:2014-05-17  浏览次数:21043 次

C# winform想办法取到一个网页的值 100分
本帖最后由 liu13541dong 于 2013-04-17 03:25:44 编辑
我对网页操作不是很熟悉,我大概想要实现的功能就是
取http://bns.plaync.com/api/launcher/launcher?serverType=live
用IE的内核打开是需要下载的,用火狐之类打开可以直接看到值
我就是想取这个网页的内容
我尝试过用webBrowser,但是一旦成功登录后使用Navigate,就会直接像IE那样弹下载,
后来我想过用ajax的跨域取网页元素

function writeSource() {
    if (xmlHttp.readyState == 4) {
        alert(xmlHttp.responseText);
    }
}

xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = writeSource;
xmlHttp.open('GET', 'http://bns.plaync.com/api/launcher/launcher?serverType=live', true);
    xmlHttp.send(null);


但是调用open的时候失败,跨域也失败了。在火狐上是成功了的……
然后我试过用webclient,但是因为登录的时候是https的,所以也不成功
我尝试用WebRequest,但是没法进行操作登录,里面的post加密有几个参数我搞不定……
后来我又想过用webBrowser登录成功后产生cookie,然后把这个cookie转换成WebRequest用的cookie

CookieContainer CCArray = new CookieContainer();
string strCookie = webBrowser1.Document.Cookie;
string[] cookstr = strCookie.Split(';');
foreach (string str in cookstr)
{
     string[] cookValueName = str.Split('=');
     Cookie ck = new Cookie(cookValueName[0].Trim().ToString(),cookValueName[1].Trim().ToString());
       ck.Domain = "bns.plaync.com";
       CCArray.Add(ck);
 }


但是我加入到WebRequest的时候又来一个异常,对象未实例化。
最后我找一下百度+谷歌,找到了一个屏蔽下载,自动下载到本地,我再读取的。
后面看了下,又是webBrowser+Webclient下载的功能,结果还是因为没cookie,所以下载的是错误的文件。实在没辙了。
问题:不知道能不能在webBrowser1下取到http://bns.plaync.com/api/launcher/launcher?serverType=live这个的值,他打开要下载

------解决方案--------------------

  static void Main(string[] args)
        {
            Console.WriteLine(Getpage());
            Console.Read();
        }

        static string Getpage()
        {
            System.IO.Stream response;
            System.IO.StreamReader sr;
            string result = string.Empty;
            string domain = "http://bns.plaync.com/api/launcher/launcher?serverType=live";
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(domain);
            request.Method = "GET";
            request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            request.Headers.Set("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3");          
 &nbs