/// <summary> /// 传入功能序号和要写入的bytearray进行post操作 /// </summary> /// <param name="index"></param> /// <param name="bytearray"></param> /// <returns></returns> private string PostModeLink(int index, byte[] bytearray) { string Url = SetUrl(ModeList[index]); SendPostLoginParameter sendpost = new SendPostLoginParameter(); sendpost.PostUrl = Url; sendpost.ReferUrl = Url; sendpost.Bytesarray = bytearray; string output = Send_Post(sendpost); return(output); }
/// <summary> /// 指定载入网址、来源网址和要post的字符串发送POST请求 /// </summary> /// <param name="posturl"></param> /// <param name="ReferUrl"></param> /// <param name="bytes"></param> /// <returns></returns> private string Send_Post(SendPostLoginParameter SendPost) { string output = ""; #region 构造请求头 HttpWebRequest httpRequest = (HttpWebRequest)HttpWebRequest.Create(SendPost.PostUrl); httpRequest.Method = "POST"; SetHeaderValue(httpRequest.Headers, "Host", "ojjx.wzu.edu.cn"); SetHeaderValue(httpRequest.Headers, "Connection", "keep-alive"); httpRequest.Headers["Cache-Control"] = "max-age=0"; httpRequest.Headers["Origin"] = "http://ojjx.wzu.edu.cn"; httpRequest.Headers["Upgrade-Insecure-Requests"] = "1"; httpRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"; httpRequest.ContentType = "application/x-www-form-urlencoded"; httpRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"; httpRequest.Headers["DNT"] = "1"; httpRequest.Referer = SendPost.ReferUrl; httpRequest.Headers["Accept-Encoding"] = "gzip, deflate"; httpRequest.Headers["Accept-Language"] = "zh-CN,zh;q=0.8"; if (SendPost.NeedRedirect == false) { httpRequest.AllowAutoRedirect = false; } else { httpRequest.AllowAutoRedirect = true; } httpRequest.CookieContainer = cookie; #endregion #region 创建IO流写入POST内容 Stream stream = httpRequest.GetRequestStream(); stream.Write(SendPost.Bytesarray, 0, SendPost.Bytesarray.Length); stream.Close(); #endregion #region 返回并接收数据 HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); if (Convert.ToString(httpResponse.StatusCode) == "Found") { IsRedirect = true; } else { IsRedirect = false; } StreamReader ReadersOfStream = new StreamReader(httpResponse.GetResponseStream(), System.Text.Encoding.GetEncoding("gb2312")); output = ReadersOfStream.ReadToEnd(); #endregion return(output); }
private string GetClassTable(ClassTableGoal classtable) { #region 创建变量并初始化正则表达式 string postvalue = ""; PageCode = Send_Get(SetUrl(ModeList[0])); string url = SetUrl(ModeList[0]); Regex input = new Regex("input type=\"hidden\" name=\".*?\" value=\".*?\""); Regex inputname = new Regex("name=\".*?\""); Regex inputvalue = new Regex("value=\".*?\""); Regex SelectYear = new Regex("<option selected=\"selected\" value=\"\\d+-\\d+\">"); Regex SelectTerm = new Regex("<option selected=\"selected\" value=\"\\d\">"); #endregion #region 检查请求的学期是否为当前学期 如是当前学期则直接返回数据 Match YearMatch = SelectYear.Match(PageCode); Match TermMatch = SelectTerm.Match(PageCode); String Year = YearMatch.ToString(); String Term = TermMatch.ToString(); if (Year.IndexOf(classtable.Year) != -1 && Term.IndexOf(classtable.Trem) != -1) { return(PageCode); } #endregion #region 构造发送的字符串 MatchCollection inputmatch = input.Matches(PageCode); postvalue = inputname.Match(inputmatch[0].Value).ToString().Replace("name=\"", "").Replace("\"", "") + "=xnd&" + inputname.Match(inputmatch[1].Value).ToString().Replace("name=\"", "").Replace("\"", "") + "=&" + inputname.Match(inputmatch[2].Value).ToString().Replace("name=\"", "").Replace("\"", "") + "=" + inputvalue.Match(inputmatch[2].Value).ToString().Replace("name=\"", "").Replace("\"", "").Replace("+", "%2b") + "&xnd="; postvalue += classtable.Year + "-" + Convert.ToString(Convert.ToInt32(classtable.Year) + 1) + "&xqd=" + classtable.Trem; postvalue = postvalue.Replace("value=", ""); byte[] bytes = System.Text.Encoding.UTF8.GetBytes(postvalue); #endregion #region 构造参数结构 SendPostLoginParameter send = new SendPostLoginParameter(); send.Bytesarray = bytes; send.PostUrl = url; send.ReferUrl = url; send.NeedRedirect = false; #endregion PageCode = Send_Post(send); return(PageCode); }
/// <summary> /// 登陆主页函数 /// </summary> /// <param name="ParaLogin"></param> /// <returns></returns> private string Login(LoginParameter ParaLogin) { #region 变量声明 Regex reg = new Regex("<input type=\"hidden\" name=\"__VIEWSTATE\" value=\"(.*?)\" />"); string postUrl = MainUrl; //请求地址 string poststring = ""; //构造POST请求字符串 string code = ParaLogin.secertcode; //验证码 string statecode; //网页内的VIEWSTATE #endregion #region 登陆主页获取网页内容 HttpWebRequest GetStateCode = (HttpWebRequest)HttpWebRequest.Create(postUrl); //连接主页 WebResponse result = GetStateCode.GetResponse(); //获取响应 Stream receviceStream = result.GetResponseStream(); //创建IO流 StreamReader readerOfStream = new StreamReader(receviceStream, System.Text.Encoding.GetEncoding("gb2312")); //创建流读取器 string strHTML = readerOfStream.ReadToEnd(); //获取网页内容 readerOfStream.Close(); receviceStream.Close(); result.Close();//关闭流 #endregion #region 匹配ViewState Match whatstate = reg.Match(strHTML); //创建匹配VIEWSTATE的正则表达式 statecode = whatstate.Groups[1].Value; //匹配结果 statecode = HttpUtility.UrlEncode(statecode); //URL编码 poststring = "__VIEWSTATE=" + statecode + "&txtUserName="******"&Textbox1=&TextBox2=" + ParaLogin.password + "&txtSecretCode=" + code + "&RadioButtonList1=%D1%A7%C9%FA" + "&Button1=&lbLanguage=&hidPdrs=&hidsc="; byte[] bytes = System.Text.Encoding.UTF8.GetBytes(poststring); #endregion #region 构造参数结构 SendPostLoginParameter sendpost = new SendPostLoginParameter(); sendpost.PostUrl = postUrl; sendpost.ReferUrl = MainUrl; sendpost.Bytesarray = bytes; sendpost.NeedRedirect = true; #endregion return(Send_Post(sendpost)); }