您的位置首页生活百科

超级课程表在技术上是怎么实现的?

超级课程表在技术上是怎么实现的?

的有关信息介绍如下:

超级课程表在技术上是怎么实现的?

我也是华软学院的 ,我也写过类似的系统,是利用httpclient模拟登录 ,你抓取高校教务系统的网页进行解析的 ,你可以做一下修改 我愿意分享我的源代码

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.regex.MatchResult;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.httpclient.Cookie;

import org.apache.commons.httpclient.Header;

import org.apache.commons.httpclient.HttpClient;

import org.apache.commons.httpclient.NameValuePair;

import org.apache.commons.httpclient.cookie.CookiePolicy;

import org.apache.commons.httpclient.cookie.CookieSpec;

import org.apache.commons.httpclient.methods.GetMethod;

import org.apache.commons.httpclient.methods.PostMethod;

import org.apache.commons.httpclient.params.HttpMethodParams;

import org.apache.commons.lang3.StringEscapeUtils;

import org.jsoup.Jsoup;

import org.jsoup.select.Elements;

import org.jdom.Attribute;

import org.jdom.Comment;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.JDOMException;

import org.jdom.input.SAXBuilder;

import org.jdom.output.Format;

import org.jdom.output.XMLOutputter;

import com.sun.corba.se.spi.servicecontext.ServiceContext;

import com.sun.org.apache.bcel.internal.generic.NEW;

import com.sun.org.apache.commons.collections.StaticBucketMap;

public class LoginAgency extends HttpServlet

{

private static final String LOGON_SITE = "http://class.sise.com.cn"; //登录服务器域名

private static final int LOGON_PORT =7001; //登录服务器端口

static String userName="",userID="",dayID[]={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"},bucketID="";

XmlParse xml=new XmlParse();

Verify ver=new Verify();

String responseString = "";//响应内容

boolean flag;

byte[] bytes;

public LoginAgency(){super();}

public void destroy(){super.destroy(); }

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

//获取用户名和密码

request.setCharacterEncoding("gb2312");

String user_name=request.getParameter("username");

String pass_word=request.getParameter("password");

HttpClient client = new HttpClient();

client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT);

//登录页面

//设置http头

List<Header> headers = new ArrayList<Header>();

headers.add(new Header("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"));

headers.add(new Header("Refere", "

"));

client.getHostConfiguration().getParams().setParameter("http.default-headers", headers);

PostMethod post = new PostMethod("

");

NameValuePair username= new NameValuePair("username",user_name); //根据学生在MyScse登录界面系统输入的登录信息构造明值对

NameValuePair password = new NameValuePair("password", pass_word);

NameValuePair nm= new NameValuePair("a28a3bc430a2ce728dbac425643905db", "2ab5d074c5ebb947c34f80dbd3f4e48e");

post.setRequestBody(new NameValuePair[] {username,password,nm}); //根据明值对构造对MyScse系统的请求内容

int status=client.executeMethod(post);

Cookie[] cookies = client.getState().getCookies();

client.getState().addCookies(cookies);

post.releaseConnection();

String newUrl="

";

client.getState().addCookies(cookies);

post.releaseConnection();

GetMethod get = new GetMethod(newUrl);

get.setRequestHeader("Cookie", cookies.toString());

client.executeMethod(get);

get.releaseConnection();

/*课程表主页

*

*/

String schedular="

";

get= new GetMethod(schedular);

get.setRequestHeader("Cookie", cookies.toString());

client.executeMethod(get);

bytes = get.getResponseBody();

responseString = new String(bytes, "gb2312");//此处根据网页的编码方式设置编码方式,如果全部用GBK的话,可能也会出现乱码

System.out.println(responseString);

get.releaseConnection();

// 解析Html页面

org.jsoup.nodes.Document doc = Jsoup.parse(responseString);

response.setContentType("text/html");

response.setCharacterEncoding("gb2312");

PrintWriter out = response.getWriter();

out.println("<html><head><title></title><link rel='stylesheet' href='style.css' type='text/css'></head><body>");

Elements title = doc.select("td");

int mtag=0;

for (org.jsoup.nodes.Element link : title) {

if(mtag==9){out.println("<table><th id='th1'>"+StringEscapeUtils.escapeHtml3(link.text())+"</th><table>");}

if(mtag==10){out.println("<table><td id='td1'>"+StringEscapeUtils.escapeHtml3(link.text())+"</td><table>");}

if(mtag==11){

String str=StringEscapeUtils.escapeHtml3(link.text());

userID=str.substring(str.indexOf("学号:")+4,str.indexOf("姓名")-6);

userName=str.substring(str.indexOf("姓名:")+3,str.indexOf("年级")-6);

try

{

flag=ver.isExisting(userName,userID);

System.out.println(flag);

} catch (JDOMException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

mtag++;

}

out.println("<table><tr><th></th><th>星期一</th><th>星期二</th><th>星期三</th><th>星期四</th><th>星期五</th><th>星期六</th><th>星期日</th></tr>");

int i=0;

int j=22;

int tag=0;

for (org.jsoup.nodes.Element link : title) {

// System.out.println(i+StringEscapeUtils.escapeHtml3(link.text()));

if(i>22){

if(i>j){

tag=j;

j=j+8;

out.println("<tr><td>"+StringEscapeUtils.escapeHtml3(link.text())+"</td>");

bucketID=StringEscapeUtils.escapeHtml3(link.text());

}

if(i<j&&i>tag+1){

if(!StringEscapeUtils.escapeHtml3(link.text()).equals("&nbsp;"))out.println("<td></td>");//"+StringEscapeUtils.escapeHtml3(link.text())+"

else {

out.println("<td class='empty'></td>");

try{if(flag==false){xml.addXml(dayID[i-tag-2], bucketID, userName,userID);}} catch (JDOMException e){}

}

}

if(i==j){

if(!StringEscapeUtils.escapeHtml3(link.text()).equals("&nbsp;"))out.println("<td></td></tr>");

else{

out.println("<td class='empty'></td></tr>");

try{if(flag==false){xml.addXml(dayID[i-tag-2], bucketID, userName,userID);}} catch (JDOMException e){}

}

}

}

i++;

}

out.println("</table></body></html>");

get.releaseConnection();

out.flush();

out.close();

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

doGet(request,response);

}

public void init() throws ServletException{}

/**

* 提取HTML文件的文本内容

*

* @author Jeelon

* @param html

* 提取的html文件名

* @return 返回提取内容String

*/

public String getDocument(String html) throws IOException {

String text = "";

// 解析Html页面

org.jsoup.nodes.Document doc = Jsoup.parse(html);

// 提取标题信息

Elements title = doc.select("title");

for (org.jsoup.nodes.Element link : title) {

text += link.text() + " ";

}

// 提取table中的文本信息

Elements links = doc.select("table");

for (org.jsoup.nodes.Element link : links) {

text +=link.text() + " ";

}

// 提取div中的文本信息

Elements divs = doc.select("div[class=post]");

for (org.jsoup.nodes.Element link : divs) {

text += link.text() + " ";

}

return text;

}

}