HttpURLConnection模拟登录学校的正方教务系统

  教务系统登录界面

  如图1-1

  

                1-1

  

  F12--》network查看登录教务系统需要参数:

  __VIEWSTAT

  txtUserName

  TextBox2

  txtSecretCode

  RadioButtonList1

  Button1

  lbLanguage

  hidPdrs

  hidsc

  如图1-2

  

                       1-2

  或者登录之前开启wireshark也可捕获到登录系统时post的数据,使用"http.request.method==POST"过滤条件进行筛选

  如图1-3

                                  1-3

  

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.ProtocolException; import java.net.URL; import java.net.URLEncoder; import java.util.regex.Matcher; import java.util.regex.Pattern; /* * Copyright (c) 2015 * technology co., LTD) * All rights reserved. */ /** * Description : * <p/> * <br><br>Time : 2015-11-10 上午11:13:13 * * @author ZXL * @version 1.0 * @since 1.0 */ public class TeachingAffaiSystemLogin { //验证码url //static String surl = "http://jwc.gduf.edu.cn/CheckCode.aspx"; private static String main_url = "http://jwc.gduf.edu.cn/default2.aspx"; private static String forword_url = "http://jwc.gduf.edu.cn/xs_main.aspx?xh="; private static String responseCookie = ""; private static String __VIEWSTATE = ""; private static String txtUserName = "教务系统账号"; private static String TextBox2 = "教务系统密码"; private static String txtSecretCode = ""; private static String RadioButtonList1 = "学生"; private static String Button1 = ""; private static String lbLanguage = ""; private static String hidPdrs = ""; private static String hidsc = ""; private static URL url; private static HttpURLConnection httpURLConn; private static String imageName = "code"; public static void main(String[] args) { // TODO Auto-generated method stub  doGet(); doPost(); } /** * GET参数 __VIEWSTATE * @param args */ private static void doGet(){ try { //保存验证码图片 url = new URL(main_url); httpURLConn = (HttpURLConnection)url.openConnection(); httpURLConn.setDoInput(true); httpURLConn.setDoOutput(true); //拿到服务器随机生成的__VIEWSTATE String line = null; BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"GB2312")); String regEx = "<input.*type=\"hidden\".*name=\"__VIEWSTATE\".*value=\"(.*)\".*/>"; while ((line = br.readLine())!=null){ Pattern pat = Pattern.compile(regEx); Matcher mat = pat.matcher(line); boolean rs = mat.find(); if (rs==true){ System.out.println(mat.groupCount()); for(int i=1;i<=mat.groupCount();i++){ System.out.println(mat.group(i)); } __VIEWSTATE = mat.group(1); } } } catch (MalformedURLException e) { // TODO Auto-generated catch block  e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block  e.printStackTrace(); } } /** * post参数登录到教务系统 * @param args */ private static void doPost(){ //post数据登录 try { url = new URL(main_url); httpURLConn = (HttpURLConnection)url.openConnection(); httpURLConn.setDoInput(true); httpURLConn.setDoOutput(true); httpURLConn.setRequestProperty("contentType", "GB2312"); StringBuilder sb = new StringBuilder(); sb.append("__VIEWSTATE=" +URLEncoder.encode(__VIEWSTATE, "GB2312")); sb.append("&txtUserName="+URLEncoder.encode(txtUserName, "GB2312")); sb.append("&TextBox2="+URLEncoder.encode(TextBox2, "GB2312")); sb.append("&txtSecretCode="+URLEncoder.encode(txtSecretCode, "GB2312")); sb.append("&RadioButtonList1="+URLEncoder.encode(RadioButtonList1, "GB2312")); sb.append("&Button1="+Button1); sb.append("&lbLanguage="+lbLanguage); sb.append("&hidPdrs="+hidPdrs); sb.append("&hidsc="+hidsc); httpURLConn.setRequestProperty("Content-Length", String.valueOf(sb.toString().length())); httpURLConn.setRequestProperty("Referer", main_url); httpURLConn.setRequestMethod("POST"); httpURLConn.setRequestProperty("Cookie", responseCookie); //不重定向 httpURLConn.setInstanceFollowRedirects(false); OutputStream os = httpURLConn.getOutputStream(); os.write(sb.toString().getBytes("GB2312")); os.close(); //post之后返回的页面 BufferedReader bf = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"GB2312")); String line1 = null; while ((line1=bf.readLine())!=null){ System.out.println(line1); } System.out.println("responseCode="+httpURLConn.getResponseCode()); System.out.println("重定向地址"+httpURLConn.getHeaderField("Location")); responseCookie = httpURLConn.getHeaderField("Set-Cookie"); System.out.println(responseCookie); //登录主界面 String line = null; url = new URL(forword_url+URLEncoder.encode(txtUserName,"GB2312")); httpURLConn = (HttpURLConnection)url.openConnection(); httpURLConn.setRequestProperty("Referer", forword_url+URLEncoder.encode(txtUserName,"GB2312")); httpURLConn.setRequestProperty("Content-Type", "text/xml; charset=GB2312"); httpURLConn.setRequestProperty("Cookie", responseCookie); httpURLConn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"); httpURLConn.setRequestMethod("GET"); httpURLConn.setDoInput(true); httpURLConn.setDoOutput(true); BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConn.getInputStream(),"GB2312")); while ((line = br.readLine())!=null){ System.out.println(line); } } catch (ProtocolException e) { // TODO Auto-generated catch block  e.printStackTrace(); } catch (MalformedURLException e1) { // TODO Auto-generated catch block  e1.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block  e.printStackTrace(); } } }

  先get页面main_url,从返回页面获取到hidden的viewstate,连同其它参数一起post到main_url。

  

  因为post到main_url之后,服务器端做了一个重定向处理,返回码为302,重定向页面为forword_url+“学号”(也可以在HttpURLConnection的getHeaderField("Location")获得)。

  参考资料:http://www.blogfshare.com/php-curl-zhengfang.html

转载于:https://www.cnblogs.com/lindaZ/p/4957655.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值