C# winform如何取到一个网页的值
我对网页操作不是很熟悉,我大概想要实现的功能就是 取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"); request.Headers.Set("Accept-Language", "zh-cn,zh;q=0.5"); request.Headers.Set("Accept-Encoding", "gzip,deflate,sdch"); request.Host = "bns.plaync.com"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.47 Safari/536.11"; request.KeepAlive = true; HttpWebResponse httprp = (HttpWebResponse)request.GetResponse(); httprp.Headers.Set("Content-Encoding", "gzip"); //获取cookie的响应头->最好还是写一个cookie //httprp.Headers[""]; response = httprp.GetResponseStream(); sr = new System.IO.StreamReader(response,Encoding.UTF8); result = sr.ReadToEnd(); response.Close(); sr.Close(); return result; }
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); }
你确认一下每一个cookie的domain是否都是bns.plaync.com 会不会存在不一样的。
我比较看好。
webbroser登录取cookie然后给httpwebrequest,或webclient这种方法。
|