Android模拟登录评论CSDN实现代码

有时候作为非官方开发的APP集成了官方的所有信息,但是现在需要实现另一个功能那就是登录发表评论到官方的网站,而非官方的APP并不知道官方网站是怎么实现登录与评论的,而且越大型的网站,为了防止这样的事情发生,增加了许许多多阻碍,不过我们这里可以给大家提供一个通用的方式,就是有点费时,不过按照此方法,基本所有的网站都不在话下。今天就拿CSDN做一下试验。

1.登录CSDN

查看其源代码看看其form表单:

其难点在post data数据中it的value与execution的value,其为随机产生,这估计是CSDN防止恶意登录设置的动态标识,不过你可以在Android 中先获取该值然后设置到需要提交的表单项中。

下面使用xutils与Jsoup获取网页属性:

RequestParams params = new RequestParams("https://passport.csdn.net/account/login?ref=toolbar");
params.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko");
x.http().get(params, new Callback.CommonCallback<String>() {
  @Override
  public void onSuccess(String result) {
    Log.i("csdn", "onSuccess");
    RequestParams params1=new RequestParams("https://passport.csdn.net/account/login?ref=toolbar");
    params1.setHeader("Accept","text/html, application/xhtml+xml, */*");
    params1.setHeader("Content-Type", "application/x-www-form-urlencoded");
    params1.setHeader("DNT", "1");
    params1.setHeader("Host","passport.csdn.net");
    params1.setHeader("Accept-Language","zh-CN");
    params1.setHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko");
    Document doc=Jsoup.parse(result);
    Element formEle=doc.getElementById("fm1");
    Elements inputs=formEle.getElementsByTag("input");
    for (Element input : inputs){
      if(input.attr("name").equals("lt")){
        params1.addQueryStringParameter("lt", input.attr("value"));
      }else if(input.attr("name").equals("execution")){
        params1.addQueryStringParameter("execution", input.attr("value"));
      }else if(input.attr("name").equals("_eventId")){
        params1.addQueryStringParameter("_eventId", input.attr("value"));
      }
    }
    params1.addQueryStringParameter("username", "你的帐号");
    params1.addQueryStringParameter("password","你的密码");
  }

  @Override
  public void onError(Throwable ex, boolean isOnCallback) {
    Log.i("csdn", "onError");
  }

  @Override
  public void onCancelled(CancelledException cex) {
    Log.i("csdn", "onCancelled");
  }

  @Override
  public void onFinished() {
    Log.i("csdn", "onFinished");
  }
});

这样我们不仅获取了网页的动态标识,而且设置到即将提交表单的RequestParams当中。

这样我们重新生成了一个params1,这个时候所有表单信息都已经设置到其中,下面就就模拟登录了:

public void getLoginCSDN(final RequestParams params){
  x.http().request(HttpMethod.POST, params, new Callback.CommonCallback<String>() {
    @Override
    public void onSuccess(String result) {
      Log.i("liyuanjinglyj", "onSuccess");
      System.out.println(result.toString());

    }

    @Override
    public void onError(Throwable ex, boolean isOnCallback) {
      ex.printStackTrace();
      Log.i("liyuanjinglyj", "onError");
    }

    @Override
    public void onCancelled(CancelledException cex) {
      Log.i("liyuanjinglyj", "onCancelled");
    }

    @Override
    public void onFinished() {
      Log.i("liyuanjinglyj", "onFinished");
    }
  });

调用getLoginCSDN将在日志中输出如下信息:

2.评论CSDN博文

首先我们随便打开一篇博文,将httpWatch也打开。现在在评论中输入信息,不要立即点击提交,先开启httpWatch。然后提交,然后关闭,我们会得到如下界面:

这里提交的表单数据为三个,还有一个Query String:
这里为什么不打开HTML代码看,那我们先看看HTML代码:
能看出什么吗?我唯一看出来的就是表单在div id=comment_form中,可是提交的表单项去哪里呢?答案就是CSDN写在JS里面了。下面我们打开其处理comment_form的JS。

人家写在这里,你不费点时间还真找不到。如果你按照JS里面的name提交表单数据,那么你肯定得不到任何结果。返回0以失败结束。

下面我们开始设置评论的相关数据到RequestParams中:

RequestParams requestParams = new RequestParams("http://blog.csdn.net/ljy1988123/comment/submit");
requestParams.setConnectTimeout(15000);
requestParams.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko");
requestParams.setHeader("Accept-Language", "zh-CN");
requestParams.setHeader("Host","blog.csdn.net");
requestParams.setHeader("Referer","http://blog.csdn.net/ljy1988123/article/details/50581207");
requestParams.setHeader("Accept", "*/*");
requestParams.setHeader("Content-Type", "application/x-www-form-urlencoded");
requestParams.setHeader("X-Requested-With", "XMLHttpRequest");
requestParams.setHeader("Connection", "Keep-Alive");
requestParams.setMultipart(true);
requestParams.addQueryStringParameter("id", "50581207");
requestParams.addParameter("commentid", " ");
requestParams.addParameter("content", "  太喜欢这篇博文了。。 98 ");
requestParams.addParameter("replyId", " ");
setHttpContent(requestParams);

当然这里面的数据有的并不需要,为了测试我按照HttpWatch中给的设置的:
然后在调用post请求:

public void setHttpContent(RequestParams params){
  x.http().post(params, new Callback.CommonCallback<String>() {
    @Override
    public void onSuccess(String result) {
      Log.i("liyuanjinglyj", "onSuccess");
      System.out.println(result.toString());
    }

    @Override
    public void onError(Throwable ex, boolean isOnCallback) {
      ex.printStackTrace();
      Log.i("liyuanjinglyj", "onError");
    }

    @Override
    public void onCancelled(CancelledException cex) {
      Log.i("liyuanjinglyj", "onCancelled");
    }

    @Override
    public void onFinished() {
      Log.i("liyuanjinglyj", "onFinished");
    }
  });
}

将输出如下日志信息:

其返回1代表成功,返回0代表失败,唯一需要说明的是我设置的超时时间是15秒,为什么设置这么长时间,想必大家比我清楚,CSDN在网页评论都需要这么长时间,何况手机端呢。

在看看网页效果:

多的一个是测试中超时报错发表上去的。

这篇文章只是模拟的登录与评论CSDN,其他网站与这差不多。

(0)

相关推荐

  • Android集成新浪微博第三方登录的方法

    本文实例讲述了Android集成新浪微博第三方登录的方法.分享给大家供大家参考.具体实现方法如下: 1.下载微博的sdk ,导入微博的jar包两个 android-support-v4.jar和weibosdkcore.jar两个包 2.把新浪微博中的demo_src中SDK中的com,导入到项目中 3.用demo中的constants,主要是参数设置,将里面的参数改成自己的参数. 4.编写代码,主要步骤如下: 复制代码 代码如下: // 初始化微博对象 mWeiboAuth = new Wei

  • Android客户端实现注册、登录详解(1)

    我们在开发安卓App时难免要与服务器打交道,尤其是对于用户账号信息的注册与登录更是每个Android开发人员必须掌握的技能,本文将对客户端的注册/登录功能的实现进行分析,不到之处还请指出. 在这里我们仅讨论客户端如何请求服务器进行注册,而服务器在收到客户端请求后进行的一系列操作并不在本文所述范围内,有兴趣大家可以参考 请求服务器 客户端在进行用户信息的注册和登录时一般使用post请求(携带参数)去服务器.以volley框架请求服务器为例,真正与服务器进行交互的就是如下代码: StringRequ

  • Android属性动画实现炫酷的登录界面

    我们聊聊我们常写的登录界面,这个界面我相信很多人都写过,而且也没什么难度,但是如果要实现比较不一般的效果,那就要花点心思了,先看看项目的效果吧: 我一直都不知道怎么在编辑框连设置图片大小,所以这个图不怎么样适配编辑框了,大家先凑合着看看. 我先讲讲思路,当我们输入完账号跟密码之后,点击登录,那这个输入框就慢慢的消失,在消失后,紧接着就出现这个进度的界面. 思路有了,那我们就开始编码了: 新建一个项目,然后系统生成了一个MainActivity.java文件和activity_main.xml文件

  • Android开发之登录验证实例教程

    本文所述实例源自一个项目开发中的登录验证功能,具体的要求就是,在Android端输入用户名和密码,在服务器端验证MySQL数据库中是否有此用户,实现之前当然首要的是,如何使Android端的数据发送到服务器端,具体的实现方法如下: 服务器端:ManageServlet.java代码如下: public class ManageServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServle

  • Android实现登录功能demo示例

    本文实例讲述了Android实现登录功能的方法.分享给大家供大家参考,具体如下: 安卓,在小编实习之前的那段岁月里面,小编都没有玩儿过,如果说玩儿过,那就是安卓手机了,咳咳,敲登录的时候有种特别久违的熟悉,这种熟悉的感觉就和当时敲机房收费系统一样,那叫一个艰难啊,不过小编相信,在小编的IT成长之路上,正是因为有了这些艰难险阻陪伴着小编一起成长,才让小编更加勇敢坚强,勇敢的面对一个又一个bug,坚强的敲完一行行代码,经过了几天的研究登录一条线的功能已经实现,现在小编就来简单的总结一下,还请小伙伴们

  • Android模拟登录评论CSDN实现代码

    有时候作为非官方开发的APP集成了官方的所有信息,但是现在需要实现另一个功能那就是登录发表评论到官方的网站,而非官方的APP并不知道官方网站是怎么实现登录与评论的,而且越大型的网站,为了防止这样的事情发生,增加了许许多多阻碍,不过我们这里可以给大家提供一个通用的方式,就是有点费时,不过按照此方法,基本所有的网站都不在话下.今天就拿CSDN做一下试验. 1.登录CSDN 查看其源代码看看其form表单: 其难点在post data数据中it的value与execution的value,其为随机产生

  • Scrapy实现模拟登录的示例代码

    为什么要模拟登录 有些网站是需要登录之后才能访问的,即便是同一个网站,在用户登录前后页面所展示的内容也可能会大不相同,例如,未登录时访问Github首页将会是以下的注册页面: 然而,登录后访问Github首页将包含如下页面内容: 如果我们要爬取的是一些需要登录之后才能访问的页面数据就需要模拟登录了.通常我们都是利用的 Cookies 来实现模拟登录,在Scrapy中,模拟登陆网站一般有如下两种实现方式:            (1) 请求时携带Cookies            (2) 发送P

  • python爬取企查查企业信息之selenium自动模拟登录企查查

    最近接了个小项目需要批量搜索企查查上的相关企业并把指定信息保存到Excel文件中,由于企查查需要登录后才能查看所有搜索到的信息所以第一步需要模拟登录企查查. python模拟登录企查查最重要的是自动拖拽验证插件 先介绍下项目中使用到的工具与库 Python的selenium库: Web应用程序测试的工具,Selenium可以模拟用户在浏览器中的操作,就像真实用户使用一样. 官方技术文档:https://www.selenium.dev/selenium/docs/api/py/index.htm

  • Android利用爬虫实现模拟登录的实现实例

    Android利用爬虫实现模拟登录的实现实例 为了用手机登录校网时不用一遍一遍的输入账号密码,于是决定用爬虫抓取学校登录界面,然后模拟填写本次保存的账号.密码,模拟点击登录按钮.实现过程折腾好几个. 一开始选择的是htmlunit解析登录界面html,在pc上测的能实现,结果在android上运行不起来,因为htmlunit利用了javax中的类实现的解析,android不支持javax,所以就跑不起来. 不过pc还是ok的 实例代码: package com.yasin; import jav

  • Android模拟强制下线通知功能实例代码

    package com.itheima74.broadcastbestpractice; import android.content.Intent; import android.os.Bundle; import android.os.SystemClock; import android.support.v4.content.LocalBroadcastManager; import android.view.View; /** * 模拟强制下线通知 * 1.登录成功后10秒发送一条本地自

  • Python 通过爬虫实现GitHub网页的模拟登录的示例代码

    1. 实例描述 通过爬虫获取网页的信息时,有时需要登录网页后才可以获取网页中的可用数据,例如获取 GitHub 网页中的注册号码时,就需要先登录账号才能在登录后的页面中看到该信息,如下图所示.那么该如何实现模拟登录的功能呢?本文实现将通过爬虫实现 GitHub 网页的模拟登录. 2. 代码实现 在实现 GitHub 网页的模拟登录时,首先需要查看提交登录请求时都要哪些请求参数,然后获取登录请求的所有参数,再发送登录请求.如果登录成功的情况下获取页面中的注册号码信息即可.具体步骤如下: (1) 点

  • PHP Curl模拟登录微信公众平台、新浪微博实例代码

    使用curl之前先打开curl配置,具体方式百度一下就知道,开启curl扩展.密码用md5加密,这是经过测试成功的,把用户跟密码改成你的就行了. 下面一段代码给大家介绍php使用curl模拟登录微信公众平台,具体代码如下所示: <?php //模拟微信登入 $cookie_file = tempnam('./temp','cookie'); $login_url = 'https://mp.weixin.qq.com/cgi-bin/login'; $pwd = md5("********

  • Android第三方登录之腾讯QQ登录的实例代码

    布局文件 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录成功" android:textSize="25sp" android:layout_marginTop="100dp" /> 清单文件中的配置 <activity android:n

  • Android 模拟新闻APP显示界面滑动优化实例代码

    内容: 1.滑动优化(滑动时不加载图片,停止才加载) 2.第一次进入时手动加载 代码如下: 1.界面布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:

  • Android登录界面的实现代码分享

    最近由于项目需要,宝宝好久没搞Android啦,又是因为项目需要,现在继续弄Android,哎,说多了都是泪呀,别的不用多说,先搞一个登录界面练练手,登录界面可以说是Android项目中最常用也是最基本的,如果这个都搞不定,那可以直接去跳21世纪楼啦. 废话不多说,先上效果图了,如果大家感觉还不错,请参考实现代码吧. 相信这种渣渣布局对很多人来说太简单啦,直接上布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk

随机推荐