模拟登录

模拟登录

本文主要讲解如何模拟登录“门户网站”,以登录CSDN为例,用到的工具有httpWatcherIE,Jsoup(主要是解析HTML),连接是用URLConnection(注意这是一个不完整的过程,主要提供思路)。


分析

POST Data

这里写图片描述
以上的数据是发给服务器,_evenId, execution, lt是动态获取的。

问题来了:如何动态获取数据呢?

让我们先看看它的源码:
这里写图片描述
当你进入登录界面时,web会给你个流水号,为了解决该问题,我们需要用到Jsoup(解析html文件),直接上代码:

Document document = Jsoup.parse(result);
Element form = document.select(".user-pass").get(0);
lt = form.select("input[name=lt]").get(0).val();
execution = form.select("input[name=execution]").get(0).val();
_eventId = form.select("input[name=_eventId]").get(0).val();
String date = "&lt=" + lt + "&execution=" + execution +   "&_eventId=" + _eventId;
Log.e(TAG, "从form表中的到必须数据:date);

现在我们得到了这5条必须的数据,现在把我们的数据进行整理以post的方式发送到服务端。

    private String csdnData(String obj){
        String username = "xxxxxxxxx";
        String password = "xxxxxxxxx";
        String DATE = "username=" + username + "&password=" + password + obj;
        Log.e(TAG, "完整数据内容:" + DATE);
        return DATE;
    }

该DATE就是以POST方式发送的数据。

如果读者用了以上的方式模拟登录,会提示“请先登录”的信息,因为还缺少一个重要的数据Cookie。让我们看看一下输入流:
这里写图片描述
我们会看到一个Cookie的请求头,该请求头也是动态数据,所以如果要成功实现模拟登录,必须是规定Cookie内容(也可以理解发送Cookie数据)。

那么什么是Cookie?

所谓Cookie,其实是服务器放置在客户端上的数据,用来标识客户的身份的。举个简单的例子,百度贴吧,只要你之前有登录过,之后再打开浏览器的时候就不需要再登录了。这个就是百度在你电脑存了一个Cookie(该Cookie名交BDUSS)。只要你有这个Cookie,就可以通过这个Cookie直接登录不用再输入用户名和密码了。

如何获取Cookie
这里写图片描述
我们要获得这两个Cookie,根据网站的不同,Cookie的数目也是不一定的,当然Cookie数目越少越好。
获取Cookie的代码如下:

    Map<String, List<String>> headerFields = conn.getHeaderFields();
    Log.e(TAG, "headerFields:" + headerFields.size());
    for (String key: headerFields.get("Set-Cookie")) {
            Log.e(TAG, "Set-Cookie:" + key);
        }

在数据发送中添加Cookie属性:

conn.setRequestProperty("Cookie", cookie_date);

大体思路:发送必要的数据给服务器,设置正确Cookie属性。就能实现模拟登录。

若有问题,欢迎大家指正~

声明:本文只用于交流探讨,所给案例只是用于演示教学。任何因看完本文后而引起的纠纷与本人无关。(大家不要去作恶啊)。


采用资料:
http://blog.csdn.net/njchenyi/article/details/38801287
https://www.zhihu.com/question/31566835

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值