java中自动登录,并获取数据程序

web的一些隐私数据,需要先登录,然后才能获取这些数据,用程序来实现,就需要实现自动登录,然后将登录信息保存在Cookie中,以便取得数据时,无须再次登录。以网易邮箱为例:
所需jar包:commons-codec-1.3.jar  ,   common-httpclient-3.0.1.jar  ,common-logging-1.1.1.jar ,jaxen-1.1-beta-6.jar(不知道是不是必须)

源码:
import java.io.IOException;
import java.util.Date;

import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

public class AutoLogin {

    private static String USERNAME = "***";
    private static String LOGINURL = "jsp教程">http://reg.163.com/login.jsp";
   
    private String CookieStr;
    private Date EndTime;
   
    public void autoLogin(){
        HttpClient httpClient = new HttpClient();
        PostMethod post = new PostMethod(LOGINURL);
        // 注意这里的地址!
        post.setRequestHeader("Accept-Language", "en-us,en;q=0.5");
        post.setRequestHeader("Accept-Encoding","gzip, deflate");
        post.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)");
        post.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
       
        NameValuePair user = new NameValuePair("user","***");
        NameValuePair pwd = new NameValuePair("password","***");
        NameValuePair username = new NameValuePair("username",USERNAME + "@163.com");
       
        post.setRequestBody(new NameValuePair[]{username,user,pwd});
        httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
       
        int status;
        try {
            status = httpClient.executeMethod(post);
            System.out.println("loginUrl:"+status);
            Cookie[] cookies = httpClient.getState().getCookies();
            //获取cookie
            if (cookies.length == 0){
                System.out.println("Cookie:None");
            } else {
                if (cookies.length >=2)
                {
                    EndTime = cookies[1].getExpiryDate();
                    for(Cookie c:cookies){
                        CookieStr +=c.toString()+";";
                    }
                }
            }
            System.out.println(EndTime);
            System.out.println(CookieStr);
            System.out.println(post.getResponseBodyAsString());
        } catch (HttpException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            post.releaseConnection();
        }
    }
   
    public String getContent(){
        Date date = new Date();
        String content = null;
       
        //CookieStr的值为空或者cookie已经失效
        if (CookieStr == "" || EndTime == null || date.getTime() > EndTime.getTime())
        {
            autoLogin();
        }
        HttpClient client = new HttpClient();
        client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
        //get data url
        String url = "*******";

        GetMethod get = new GetMethod(url);
        get.setRequestHeader("Accept-Language", "en-us,en;q=0.5");
        get.setRequestHeader("Accept-Encoding","gzip, deflate");
        get.setRequestHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        get.setRequestHeader("Accept-Charset","ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        get.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)");
     
        //设置Cookie,必须
        get.setRequestHeader("Cookie", CookieStr);
        try {
            int status = client.executeMethod(get);
            //获取你想要的页面内容
            content = get.getResponseBodyAsString();
            System.out.println("getUrl:"+status);
            System.out.println(content);
        } catch (HttpException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally
        {
            get.releaseC

时间: 2024-11-10 07:11:58

java中自动登录,并获取数据程序的相关文章

代码-在java中,如何实现获取html页面输入框的数据用java实现

问题描述 在java中,如何实现获取html页面输入框的数据用java实现 当我输入邮箱地址了,点击按钮,就可以获取邮箱的地址并且显示出来,这是一个html的页面 就是代码文件和内容,哪位大神能帮我实现一下? 解决方案 在UserAction中建立一个字段emailAddress,然后生成setter和getter方法,这样就可以获取到页面中的输入内容了 解决方案二: html页面 修改 ,java代码使用 HttpServletRequest request = ServletActionCo

解决方案-python或java httpclient模拟登录,cookie获取问题

问题描述 python或java httpclient模拟登录,cookie获取问题 目前准备用python或java httpclient做一个模拟登录的程序,可是无法获取cookie, 原因是,请求登录URL时,服务器反应是分两步来进行的.流程大概如下: 1. 首先,服务器会先发过来一个.JS文件,浏览器执行其中的函数,生成cookie,貌似存到document.cookie中. 2. 然后,需要带着生成的cookie才能去访问登录URL. 因为我的程序不能像浏览器一样执行.js文件,所以也

代码-求助各位大神LIstfragment中,分线程获取数据后刷新界面崩溃,用分线程加载数据后

问题描述 求助各位大神LIstfragment中,分线程获取数据后刷新界面崩溃,用分线程加载数据后 如题:代码如下,要在viewpager中的一个fragment中加载一个listview,用分线程加载数据后,handleMessage给成员变量的集合赋值后,notify,会直接崩溃 /** 报警图片 */ public class AlarmPhotoFragment extends ListFragment { private int mType = 0; private ListView

java中的数组类型的数据能存储到栈空间吗

问题描述 java中的数组类型的数据能存储到栈空间吗 我们知道堆空间存储大数据,栈空间的数据先进后出, java中的数组类型的数据能存储到栈空间吗 解决方案 基本类型产生了一个值存放在栈中,变量的值就是栈的地址处的值. 引用类型则产生了一个对象,存放在内存堆中,同时将内存堆对象的指针地址(引用地址)存放在了栈中,变量的值实际是栈中的引用地址. 解决方案二: java中所有对象和数组都是在堆上分配内存的,,栈内存用来存放局部变量 解决方案三: java 存储不同类型数据Java实现登录.注册(使用

java文件输入问题-java中把整数数组的数据输入到文件中的问题

问题描述 java中把整数数组的数据输入到文件中的问题 我是java新手,把整形数组输入到文件中去为什么不是数字,是这些问号? 解决方案 BufferedWriter 用这个写 解决方案二: 写入的编码格式不对,用UTF-8格式试试 解决方案三: 我是用BufferedWriter写的啊 解决方案四: write(int c)这个方法其实输出的是c对应的character,会进行类型的转换,你可以看下输出的源码.如果你要输出整型的话,建议你后面加个空字符串输出吧,换成: bw.write(a[i

MVC中使用Knockout,json获取数据成功后,遍历填充视图模型时,代码不执行怎么回事

问题描述 MVC中使用Knockout,json获取数据成功后,遍历填充视图模型时,代码不执行怎么回事 function AppViewModel() { var self = this; self.brandstandards = ko.observableArray(); self.cart = ko.observableArray(); self.orders = ko.observableArray(); function BrandStandardViewModel(firstself

急急急!在ie浏览器下,引入java包并从数据库获取数据后css文件失效了

问题描述 急急急!在ie浏览器下,引入java包并从数据库获取数据后css文件失效了 同一个css文件,在360安全浏览器急速模式或360急速浏览器急速模式(总之是非兼容模式)下显示正常是我要的样式,但在ie浏览器,以及兼容模式下显示不出正常,但还不是完全显示不正常,我发现只有引入了java包并有jsp语句的jsp页面css失效了.貌似是jsp语句影响了css样式?求解决方案,急急急~! 解决方案 你写的css不兼容ie吧,急速模式用的webkit,兼容模式是ie 解决方案二: 但是,像text

关于java中applet问题,我的程序无法在html中显示出来,请问哪出问题了。

问题描述 关于java中applet问题,我的程序无法在html中显示出来,请问哪出问题了. 该程序是要画一个余弦图形. import java.applet.*; import java.awt.*; public class test3 extends Applet { public void start() { int x,y; Graphics g=getGraphics(); for(x=0;x<=750;x++) { g.drawString(".",x,200);

php版微信自动登录并获取昵称的方法_php实例

本文实例讲述了php版微信自动登录并获取昵称的方法.分享给大家供大家参考,具体如下: 微信自动登录并获取昵称是可以通过api接口来获取的也是通过微信开放的接口来实现了,下面我们一起来看一个例子 仅记录:微信获取昵称自动登录 经过反复几次验证,发现我这个方法有缺陷: 微信内 未关注进入网站,无法获得昵称. 关注后用我这个方法可以获得昵称. 是否是因为第一次生成openid 所以还未生成昵称?待测试. /** * 获取当前页面完整URL地址 */ function get_url() { $sys_