zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    mysql左连接、右链接、内连接
    各种排序算法及其java程序实现(转载)
    将Android手机设备挂载到ubuntu中
    EditText 不让其自动获取焦点
    Ubuntu安装JDK+Tomcat+Eclipse以及Android adb配置环境变量
    ADT22解决引用第三方jar提示java.lang.NoClassDefFoundError
    winform实现类似google的搜索提示Suggest Search
    抽象工厂模式
    各种小知识随笔
    CSS知识点【待整理】
  • 原文地址:https://www.cnblogs.com/lindaZ/p/4957655.html
Copyright © 2011-2022 走看看