用HttpWebRequestlogin到页面
如何使用HttpWebRequestlogin到http://www.bhmobile.ba/portal/index ?
loginbutton是“Pošalji”(左上angular)。
login页面的HTML源代码:
<table id="maintable" border="0" cellspacing="0" cellpadding="0" style="height:100%; width:100%"> <tr> <td width="367" style="vertical-align:top;padding:3px"><script type="text/javascript"> function checkUserid(){ if (document && document.getElementById){ var f = document.getElementById('userid'); if (f){ if (f.value.length < 8){ alert('Korisničko ime treba biti u formatu 061/062 xxxxxx !'); return false; } } } return true; } </script> <div style="margin-bottom:12px"><table class="leftbox" style="height:184px; background-image:url(/web/2007/slike/okvir.jpg);" cellspacing="0" cellpadding="0"> <tr> <th style="vertical-align:middle"><form action="http://sso.bhmobile.ba/sso/login" method="post" onSubmit="return checkUserid();"> <input type="hidden" name="realm" value="sso"> <input type="hidden" name="application" value="portal"> <input type="hidden" name="url" value="http://www.bhmobile.ba/portal/redirect?type=ssologin&url=/portal/show?idc=1111"> <table class="formbox" align="center" cellspacing="0" cellpadding="0"> <tr> <th style="vertical-align:middle; text-align:right;padding-right:4px;">Korisnik:</th> <td><input type="text" size="20" id="userid" name="userid"/></td> </tr> <tr> <th style="text-align:right;padding-right:4px;">Lozinka:</th> <td><input type="password" size="20" name="password" /></td> </tr> <tr> <th colspan="2"> <input class="dugmic" type="image" id="prijava1" alt="Prijava" src="/web/2007/dugmici/posalji_1.jpg" onmouseover="ChangeImage('prijava1','/web/2007/dugmici/posalji_2.jpg')" onmouseout="ChangeImage('prijava1','/web/2007/dugmici/posalji_1.jpg')"> </th> </tr> </table> <div style="padding:12px;"> <a href="/portal/show?idc=1121">Da li ste novi BH Mobile korisnik?</a><br /> <a href="/portal/show?idc=1121">Da li ste zaboravili lozinku(šifru)?</a><br /> </div> </form></th> </tr> </table></div>
表单操作是http://sso.bhmobile.ba/sso/login 。 我怎样才能使用HttpWebRequest来获取一个cookie,并从这个页面使用一些date?
做一个新的default.aspx,并把它放在代码背后:我不能进一步根据你当前的问题进行testing,因为你没有包括一个有效的用户名/密码。
using System; using System.Web; using System.Net; using System.IO; using System.Web.UI; using System.Web.UI.WebControls; namespace Foo { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://sso.bhmobile.ba/sso/login"); req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"; req.Method = "POST"; req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; req.Headers.Add("Accept-Language: en-us,en;q=0.5"); req.Headers.Add("Accept-Encoding: gzip,deflate"); req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"); req.KeepAlive = true; req.Headers.Add("Keep-Alive: 300"); req.Referer ="http://sso.bhmobile.ba/sso/login"; req.ContentType = "application/x-www-form-urlencoded"; String Username = "username"; String PassWord = "Password"; StreamWriter sw = new StreamWriter(req.GetRequestStream()); sw.Write("application=portal&url=http%3A%2F%2Fwww.bhmobile.ba%2Fportal%2Fredirect%3Bjsessionid%3D1C568AAA1FB8B5C757CF5F68BE6ECE65%3Ftype%3Dssologin%26url%3D%2Fportal%2Fshow%3Bjsessionid%3D1C568AAA1FB8B5C757CF5F68BE6ECE65%3Fidc%3D1023278&realm=sso&userid=" + Username + "&password=" + password + "&x=16&y=11"); sw.Close(); HttpWebResponse response = (HttpWebResponse)req.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); string tmp = reader.ReadToEnd(); foreach (Cookie cook in response.Cookies) { tmp += "\n" + cook.Name + ": " + cook.Value; } Response.Write(tmp); Response.End(); } } }
您可以使用WebClient对象中的构build,而不是自己创build请求。
WebClient wc = new WebClient(); wc.Credentials = new NetworkCredential("username", "password"); string url = "http://foo.com"; try { using (Stream stream = wc.OpenRead(new Uri(url))) { using (StreamReader reader = new StreamReader(stream)) { return reader.ReadToEnd(); } } } catch (WebException e) { //Error handeling }