首页 > HttpClient模拟登录学校网站,发现点击登录之后返回的数据仍然是登录页面,已经了解Cookie相关内容

HttpClient模拟登录学校网站,发现点击登录之后返回的数据仍然是登录页面,已经了解Cookie相关内容

  1. 目的: 是模拟登陆学校类似图书馆一类的网站,把网页版移植到Android上面

  2. 相信很多人都做了这个,但是我也看了一些文章

  3. 问题:点击登陆按钮,我获得的仍然是登陆页面

  4. Required Header,发现Header里面是有一个Cookie的选项,这个Cookie的内容可以通过加载验证码的同时获得,其实这个网站的登录时候的Cookie就是"CheckCode="+"验证码"这个使可以通过代码获得的

    /***************************
     * 获得验证码
     ****************************/
    private static HttpClient client = new DefaultHttpClient();
    private static String COOKIE = "";
    public Bitmap getcode(String imageUrl) throws Exception {
        // 这里的imageUrl就是验证码的图片地址
        HttpPost httpPost = new HttpPost(imageUrl);
        HttpResponse httpResponse = client.execute(httpPost);
        
        COOKIE = ((AbstractHttpClient) client).getCookieStore().getCookies().get(0).getValue();
     
        byte[] bytes = EntityUtils.toByteArray(httpResponse.getEntity());
        Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
        return bitmap;
    }

  1. Params

  2. 这里是我写的发送登陆按钮点击的sendPost()模拟登录的代码

  public String sendPost(String url, String username, String password,String inputcode) {
        Log.d("TAG", "In sendPost");
        HttpPost httpRequest = new HttpPost(url);

        DefaultHttpClient httpclient = new DefaultHttpClient();
        String strResult = null;

        List<NameValuePair> params = new ArrayList<NameValuePair>();


        params.add(new BasicNameValuePair("__VIEWSTATE", "/wEPDwULLTEwNDc4NjU1NDZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQZpbWdCdG6NS6KwmwZCH1Dgj4NV2VW+2H5jQg=="));
        params.add(new BasicNameValuePair("__EVENTVALIDATION", "/wEWBQLO0dBIAq+u6rYIAoTOnYUHAsKAo/kOArDJ/bQC6qjden08ITUO/dKQ9HUpHrMqhVM="));
        params.add(new BasicNameValuePair("returnUrl", "Web/Auths/Index.aspx"));



        params.add(new BasicNameValuePair("bCheckCode", "1"));
        // 账户
        params.add(new BasicNameValuePair("UserName", username));
        // 密码
        params.add(new BasicNameValuePair("UserPwd", password));
        // 验证码
        params.add(new BasicNameValuePair("InputCode", inputcode));
        // 图片的左边,貌似是不要紧的
        params.add(new BasicNameValuePair("imgBtn.x", "91"));
        params.add(new BasicNameValuePair("imgBtn.y", "37"));
        httpRequest.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        httpRequest.addHeader("Content-Type", "pplication/x-www-form-urlencoded");
        httpRequest.addHeader("Referer", "http://10.80.34.137/");
        httpRequest.setHeader("Cookie", "CheckCode=" + COOKIE);

        try {
            // 添加请求参数到请求对象
            httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            // 获得响应对象
            HttpResponse httpResponse = httpclient.execute(httpRequest);
            // 判断是否请求成功

Log.d("TAG",""+httpResponse.getStatusLine().getStatusCode());

            if (httpResponse.getStatusLine().getStatusCode() == 302) {
                // 获得响应返回Json格式数据


                strResult = EntityUtils.toString(httpResponse.getEntity());
                Log.d("TAG",strResult);
                return strResult;
            } else {
                strResult = "错误响应:" + httpResponse.getStatusLine().toString();
            }
        } catch (ClientProtocolException e) {
            strResult = "错误响应:" + e.getMessage().toString();
            e.printStackTrace();
            return strResult;
        } catch (IOException e) {
            strResult = "错误响应:" + e.getMessage().toString();
            e.printStackTrace();
            return strResult;
        } catch (Exception e) {
            strResult = "错误响应:" + e.getMessage().toString();
            e.printStackTrace();
            return strResult;
        }
        return strResult;
    }
  1. 非常想问这个是有问题出现在哪里,是因为参数写的补全还是语法出现了问题,因为自己已经着实找不到办法了,所以只好像大家提问了,谢谢大家,能提供一下解决的思路就最好了,再次谢谢大家.提问要是不好,大家可以说,我会补充的


把你用代码去提交的报文信息和你手动提交时的报文对比一下。另外需要观察一下,请求登陆页面是不是获取了一些值在提交时用到。


请注意urldecode或者form-data-encode的问题,我是也有过这样的问题,后来直接用url.open然后是直接写入字节流.

【热门文章】
【热门文章】