C#post模拟登陆教务系统失败

我在进行post登陆教务系统但是总是登陆不进去,返回给我的页面仍然是登陆页面,学校教务系统没有cookie返回只有url间的sessionid。麻烦各位大侠帮我看一下是什么地方的问题。

1、获取sessionid的代码

private string GetUrl()

{

string urlGetSession = "http://xk.zucc.edu.cn";

HttpWebRequest reqGetSession =(HttpWebRequest)WebRequest.Create(urlGetSession);

reqGetSession.Method = "GET";

reqGetSession.KeepAlive = true;

//禁止网页进行重定向

reqGetSession.AllowAutoRedirect = false;

reqGetSession.UserAgent = "Mozilla / 5.0(Windows NT 10.0; WOW64; rv: 51.0) Gecko / 20100101 Firefox / 51.0";

//创建接受网页响应的对象

HttpWebResponse resGetSession = (HttpWebResponse)reqGetSession.GetResponse();

Stream streamGetSession = resGetSession.GetResponseStream();

StreamReader srGetSession = new StreamReader(streamGetSession);

string strGetSession = srGetSession.ReadToEnd();

string[] strGetSessions = strGetSession.Split(new string[] { "/(",")/"},StringSplitOptions.None);

return strGetSessions[1];

}

2、获取验证码的代码

 private void GetValidateImage(string urlParma)

{

cookies = new CookieContainer();

string url = "http://xk.zucc.edu.cn/(" + urlParma + ")/CheckCode.aspx";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";

request.Method = "GET";

request.UserAgent = "Mozilla / 5.0(Windows NT 10.0; WOW64; rv: 51.0) Gecko / 20100101 Firefox / 51.0";

//request.CookieContainer = new CookieContainer(); //暂存到新的实例中

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

MemoryStream ms = null;

using (var stream = response.GetResponseStream())

{

byte[] buffer = new byte[response.ContentLength];

int offset = 0;

int actuallyRead = 0;

do

{

actuallyRead = stream.Read(buffer, offset, buffer.Length - offset);

offset += actuallyRead;

}

while (actuallyRead > 0);

ms = new MemoryStream(buffer);

}

response.Close();

cookies = request.CookieContainer;//保存cookies

//strCookies = request.CookieContainer.GetCookieHeader(request.RequestUri);//把cookies转换成字符串

Bitmap bitmap = new Bitmap((Stream)ms);

imgValidate.Image = bitmap;

}

3、post登陆代码

private string Login2(string urlParma)

{

Encoding enc = Encoding.GetEncoding("gb2312");

string postData = string.Format("__VIEWSTATE=dDwtNTE2MjI4MTQ7Oz7eLwpTkU0eZiReI563hfS1TF2rsQ%3D%3D&txtUserName={0}&Textbox1=&TextBox2={1}&txtSecretCode={2}&RadioButtonList1=% D1 % A7 % C9 % FA & Button1 = &lbLanguage = &hidPdrs = &hidsc = ", txtUserName.Text, txtPassword.Text, txtValidate.Text);

//把要提交的数据转换成字节数组

byte[] pb = enc.GetBytes(postData);

string url = "http://xk.zucc.edu.cn/(" + urlParma + ")/default2.aspx";

//新建一个请求

HttpWebRequest myreq = (HttpWebRequest)WebRequest.Create(url);

//指定请求的方法

myreq.Method = "POST";

myreq.ContentType = "application/x-www-form-urlencoded";

myreq.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36";

//这里请求文本的长度就是我们字节数组的长度

myreq.ContentLength = pb.Length;

//获取提交流

Stream str = myreq.GetRequestStream();

str.Write(pb, 0, pb.Length);

str.Close();

WebResponse myresp = myreq.GetResponse();//获取返回的请求

Stream revstr = myresp.GetResponseStream(); //获取流

StreamReader readstr = new StreamReader(revstr,enc);//准备读取流

Char[] readc = new Char[256];

//每次读256个「字符」

int count = readstr.Read(readc, 0, 256);

string restr = "";

while (count > 0)

{

for(int i = 0;i < count;i++)

{

restr += readc[i].ToString();

}

count = readstr.Read(readc,0,256);

}

readstr.Close();

myresp.Close();

restr = restr.Replace("\t","");

return restr;

}

winform的东西
图片描述

回答:

采用苏飞站长的HttpHelper类库重新分析了一遍,就可以顺利Post进去了

回答:

先分析那些是必要么参数

回答:

加我QQ 我也是这里的问题 532690894 密码是0

回答:

典型的正方教务系统
我以前做个一个anroid的,登陆抓取课程表和成绩信息,你把链接地址该了就好了,喜欢的话star一个哦@@
传送门

代码在 SalamanderSchedule/app/src/main/java/com/attraction/schedule/helper/FetchHelper.java

// 第一个URL,等着为后面服务

public static final String loginURL = "************";

以上是 C#post模拟登陆教务系统失败 的全部内容, 来源链接: utcz.com/p/189927.html

回到顶部