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 = "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

转载于:https://www.cnblogs.com/ylqmf/archive/2011/08/25/2153855.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何给微软提反馈建议以及bug

1.相信各位在使用.net core的过程中多多少少遇到了bug和为解决的坑那么我们肿么联系微软反馈问题你 1.找到vs编辑器中的反馈按钮 2.点击进入网址 如果是vs的问题选择visual studio栏目,如果为编译问题或者其他问题请选择对应的栏目 然后写下你的问题和截图,尽量详…

[html] 如何使用H5唤起原生地图APP(百度、高德、腾讯地图等)

[html] 如何使用H5唤起原生地图APP&#xff08;百度、高德、腾讯地图等&#xff09; <iframe src"sinaweibo://qrcode"> 或 <a href"intent://scan/#Intent;schemezxing;packagecom.google.zxing.client.android;end"" >或使用现在的唤起…

PS3支持的显示标准介绍

PS3的视频输出分别有&#xff1a;① HDMI 1.3版本02年推出HDMI 1.0版本以来&#xff0c;HDMI规范已经升级数次:2004年5月HDMI升级到HDMI 1.1版本&#xff0c;接着为了更好的兼容PC系统&#xff0c;HDMI LLC在05年8月23日推出了HDMI的1.2版-----此次修订增加了若干条非常重要的改…

巧用.mdb后缀数据库做后门

我不否认n早前的那个把asp木马写到图片文件中不失为一种好的方法&#xff0c;其实不仅可以写到图片啦 写到mp3文件里写到doc文件里都是可以的啦 copy 文件名/参数 文件名/参数 生成文件名 这样的方法可以很灵活的运用来达到隐藏文件的目的&#xff0c;具体的参数就是/a以…

windwos docker安装k8s一直staring的解决方法

今天遇到了一个很奇怪的问题 docker中启动k8s一直卡在starting 然后就不动了&#xff0c;找了很多解决方法终于得到解决这里把解决流程写在这里 1.配置镜像加速器 首先登录阿里云&#xff0c;阿里云有一个免费的镜像加速服务&#xff0c;可以加快拉取docker容器的速度这里一定…

对未标记为可安全执行的脚本_三、??XSS跨站脚本攻击

跨站脚本攻击(Cross Site Scripting)&#xff0c;缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码&#xff0c;当用户浏览该页之时&#xff0c;嵌入其中Web里面的Script代码会被执行&#xff0c;从而达到恶意攻击用户的目的。理论上&#xff0c;所有可输入的地方没有对输入…

[html] 在主框架下引入的iframe,如果检测这个iframe是否能打开,如果打不开则跳到404页面

[html] 在主框架下引入的iframe&#xff0c;如果检测这个iframe是否能打开&#xff0c;如果打不开则跳到404页面 首先我们知道 iframe 只有 onload 事件&#xff0c;没有 onerror 事件&#xff0c;无论 iframe 能否正常加载都会正常触发 onload 事件。但是由于场景不同&#x…

【Java学习笔记】线程学习笔记

一、资源 http://blog.csdn.net/axman/article/details/431796 这个博客里有Java多线程、线程池的一系列&#xff0c;从基础开始就很清楚&#xff0c;牛人 二、重点 今天读到了基础篇(三)&#xff0c;跳过了后面的方法介绍&#xff0c;以后估计还得补上来的.... 做笔记...... 1…

TortoiseSVN2IDE.pas源代码

unit TortoiseSVN2IDE; {$R icons.res} interface uses ToolsAPI, SysUtils, Windows, Dialogs, Menus, Registry, ShellApi, Classes, Controls, Graphics, ImgList, ExtCtrls, ActnList,Forms;//增加了对Forms单元的引用 const SVN_PROJECT_EXPLORER 0; SVN_LOG 1…

.net 使用阿里云RocketMQ

1.首先我们来讲解一下消息队列的作用 比如说我们的订单系统&#xff0c;再客户订单生成了以后&#xff0c;可能会有 快递系统&#xff0c;通知系统&#xff0c;和打印系统需要用到当前订单的详细内容 所以这个时候常规的操作是在A里面通过代码调用B&#xff0c;C &#xff…

[html] 使用a标签的download属性下载文件会有跨域问题吗?如何解决?

[html] 使用a标签的download属性下载文件会有跨域问题吗&#xff1f;如何解决&#xff1f; 最近刚遇到这个问题&#xff0c;后台返回的图片链接&#xff0c;点击按钮批量下载&#xff0c;a标签的 download 属性只对同源文件有效&#xff0c; 所以我们这里先把图片 url 转为 bl…

tensorflow 目标分割_Tensorflow中的控制流和优化器

控制流只要对tensorflow有一点了解&#xff0c;都应该知道graph是tensorflow最基本的一个结构。Tensorflow的所有计算都是以图作为依据的。图的nodes表示一些基本的数学运算&#xff0c;比如加法&#xff0c;卷积&#xff0c;pool等。Node使用protoBuf来进行描述&#xff0c;包…

Reflector 已经out了,试试ILSpy

Reflector是.NET开发中必备的反编译工具。即使没有用在反编译领域&#xff0c;也常常用它来检查程序集的命名规范&#xff0c;命名空间是否合理&#xff0c;组织类型的方法是否需要改善。举例说明&#xff0c;它有一个可以查看程序集完整名称的功能&#xff0c;请看下图 这里的…

Go语言通过odbc驱动连接华为高斯数据库

1.下载odbc驱动 下载后安装psqlodbc_x64.msi 安装成功后可在odbc数据源中看到以下内容 2.测试odbc驱动 在用户dsn中选择添加 输入对应的连接内容点击test 如果显示以下内容则表示驱动正常可使用odbc连接高斯数据库 3.go 语言编写 其中依赖包需要使用命令安装 go get github.c…

MFC对话框打印预览异常问题解决

昨天在别人的电脑上成功运行了上次我写的打印预览程序&#xff0c;但是今天换了一台电脑就不能运行了&#xff0c;让我觉得非常奇怪。 提示的错误信息是“内存XXXX不能为read”&#xff0c;“mfc100d.dll”中有未经处理的异常。 奇怪的是&#xff0c;我加了try catch语句后依然…

[html] 请实现一个网站加载进度条

[html] 请实现一个网站加载进度条 import { memo } from react; import { useLifecycles } from react-use; import NProgress from nprogress; import nprogress/nprogress.css;const ProgressLine memo(() > {useLifecycles(() > {NProgress.start();},() > {NPro…

activiti高亮显示图片_【正点原子FPGA连载】第二十章SD卡读BMP图片HDMI显示实验领航者 ZYNQ 之嵌入式开发指南...

1&#xff09;实验平台&#xff1a;正点原子领航者ZYNQ开发板2&#xff09;平台购买地址&#xff1a;https://item.taobao.com/item.htm?&id6061601087613&#xff09;全套实验源码手册视频下载地址&#xff1a;http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.htm…

.net Redis缓存优化提高加载速度和服务器性能(一)

距离上次服务器将图片转义至oss服务器提交加载速度已经有一段时日了 对于图片转移至oss服务器优化前后的结果可以查看我之前编写的文章点击查看 如今随着商户数的增多&#xff0c;数据的增多&#xff0c;服务器的性能再一次达到了顶峰&#xff0c;并且由于是点餐系统的缘故订…

DSA通讯协议

1.DSA-接口规范 DSA总线是一个异步&#xff0c;双向的&#xff0c;内部设计用于在一组两个微处理器之间的通信总线。 它有三个双向线&#xff1a; ● DATA -启动同步和数据传输 ● STB -数据选通&#xff08;当STB为低电平时数据是有效的&#xff09; ● ACK -启动同步&#xf…

火星人谚语系列之六:一次真实应用

总目录&#xff1a;之一&#xff0c;之二&#xff0c;之三&#xff0c;之四&#xff0c;之五&#xff0c;之六&#xff0c;之七&#xff0c;之八这是2011年7月的一次QQ群对话记录&#xff0c;做了匿名化处理&#xff0c;并重新调整了顺序&#xff0c;以便于阅读。对话的开始&am…