在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆。那么,如何解决这个问题呢?

方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时时将cookie发送过去用以表明身份,这样就能够访问带有权限的URL了。

下面首先介绍使用java模拟登陆。

  1. // 连接地址(通过阅读html源代码获得,即为登陆表单提交的URL)
  2. String surl = "http://login.goodjobs.cn/index.php/action/UserLogin";
  3. /**
  4. * 首先要和URL下的URLConnection对话。 URLConnection可以很容易的从URL得到。比如: // Using
  5. * java.net.URL and //java.net.URLConnection
  6. */
  7. URL url = new URL(surl);
  8. HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  9. /**
  10. * 然后把连接设为输出模式。URLConnection通常作为输入来使用,比如下载一个Web页。
  11. * 通过把URLConnection设为输出,你可以把数据向你个Web页传送。下面是如何做:
  12. */
  13. connection.setDoOutput(true);
  14. /**
  15. * 最后,为了得到OutputStream,简单起见,把它约束在Writer并且放入POST信息中,例如: ...
  16. */
  17. OutputStreamWriter out = new OutputStreamWriter(connection
  18. .getOutputStream(), "GBK");
  19. //其中的memberName和password也是阅读html代码得知的,即为表单中对应的参数名称
  20. out.write("memberName=myMemberName&password=myPassword"); // post的关键所在!
  21. // remember to clean up
  22. out.flush();
  23. out.close();
  24. // 取得cookie,相当于记录了身份,供下次访问时使用
  25. String cookieVal = connection.getHeaderField("Set-Cookie");

登陆成功后,即可访问其他URL了。

  1. String s = "http://user.goodjobs.cn/dispatcher.php/module/Resume/action/Preview";
  2. //重新打开一个连接
  3. url = new URL(s);
  4. HttpURLConnection resumeConnection = (HttpURLConnection) url
  5. .openConnection();
  6. if (cookieVal != null) {
  7. //发送cookie信息上去,以表明自己的身份,否则会被认为没有权限
  8. resumeConnection.setRequestProperty("Cookie", cookieVal);
  9. }
  10. resumeConnection.connect();
  11. InputStream urlStream = resumeConnection.getInputStream();
  12. BufferedReader bufferedReader = new BufferedReader(
  13. new InputStreamReader(urlStream));
  14. String ss = null;
  15. String total = "";
  16. while ((ss = bufferedReader.readLine()) != null) {
  17. total += ss;
  18. }
  19. IOUtils.write(total, new FileOutputStream("d:/index.html"));
  20. bufferedReader.close();

通过上述方式,就能访问带有权限控制的URL了。思路即为:模拟登陆,取得cookie以记录身份,下次请求时发送cookie以表明身份。

转自:http://blog.csdn.net/prince2270/article/details/6137810

java模拟Cookies登陆的更多相关文章

  1. Java模拟新浪微博登陆抓取数据

    前言:  兄弟们来了来了,最近有人在问如何模拟新浪微博登陆抓取数据,我听后默默地抽了一口老烟,暗暗的对自己说,老汉是时候该你出场了,所以今天有时间就整理整理,浅谈一二. 首先:  要想登陆新浪微博需要 ...

  2. Jsoup实现java模拟登陆

    Jsoup实现java模拟登陆 2013-10-29 14:52:05|  分类: web开发|举报|字号 订阅     下载LOFTER我的照片书  |     1:如何获取cookies. 1.1 ...

  3. java模拟有验证码的Http登陆

    所需资源下载链接(资源免费,重在分享) Tesseract:http://download.csdn.net/detail/chenyangqi/9190667 jai_imageio-1.1-alp ...

  4. Java模拟登陆02【转载】

    在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢?     方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...

  5. 浏览器与服务器交互原理以及用java模拟浏览器操作v

    浏览器应用服务器JavaPHPApache * 1,在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, * 简单的讲,当浏 ...

  6. curl模拟自动登陆&采集网页数据

    <!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content=&quo ...

  7. Java模拟登录系统抓取内容【转载】

    没有看考勤的习惯,导致我的一天班白上了,都是钱啊,系统也不发个邮件通知下....     为了避免以后还有类似状况特别写了个java模拟登录抓取考勤内容的方法(部分代码来自网络),希望有人修改后也可以 ...

  8. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  9. C# 模拟网站登陆

    实现此功能首先需要借助一些抓包工具,对相应的网站登陆过程进行分析,此过程根据网站的不同,可能复杂,也可能很简单.常用的抓包工具FF下FireBug和IE下的HttpWatch.这两个工具很强大,以此工 ...

随机推荐

  1. Linux imooc learning

    https://www.imooc.com/video/3529 Windows Vs Linux Linux: (other linux overall   https://onedrive.liv ...

  2. Spring MVC Beginner's Guide--应该看第二次

    第一遍,就差WEBFLOW知识点没过了.. 真的值得好好再看第二次呢.. 样例工程算是比较多的啦. 学到真的不少..

  3. [bzoj1598][Usaco08Mar]牛跑步_A*_Dijkstra

    牛跑步 bzoj-1598 题目大意:给你n个点,m条边的有向图.求从1到n的严格的第k短路. 注释:$1\le n\le 1000$,$1\le m \le 10,000$,$1\le k \le ...

  4. fork me on github 彩带设置无效

    挑选彩带地址: https://github.com/blog/273-github-ribbons 发现代码复制粘贴过来,但是在自己博客园上无效,如粘贴如下代码 <a href="h ...

  5. JDK(Java Development Kit)内置常用自带工具一览(转)

    注意:可能随着JDK的版本升级,工具也会随着增多. JDK(Java Development Kit)是Java程序员最核心的开发工具,没有之一. JDK是一个功能强大的Java开发套装,它不仅仅为我 ...

  6. 让我们加密吧Let's encrypt

    前言 如今的互联网越来越不安全,我们每个人的信息以及隐私不断被暴露,地下黑产盛行,经常收到垃圾短信,经常被陌生人的电话骚扰.我们的个人信息是怎么泄漏的呢?各种爬虫无时无刻不在互联网爬取着信息,各种嗅探 ...

  7. Equals和==的差别

    java中的数据类型.可分为两类:  1.基本数据类型 包含:byte,short,char,int,long,float,double,boolean .基础数据类型比較大小的时候使用的是双等号(= ...

  8. ambarella H2 添加文件到ext4文件系统

    方法1: ambarella/rootfs目录下有skeleton(骨架)目录,此目录下就是文件系统的各个目录, [root@jz4775dev]# ls skeleton/ bin debug de ...

  9. oc56--ARC多个对象的内存管理

    // main.m // ARC中多个对象的内存管理:ARC的内存管理就是MRC的内存管理(一个对象释放的时候,必然会把它里面的对象释放),只不过一个是Xcode加的代码,一个是我们自己加的代码: / ...

  10. SQL Source Control for teams

    You'll use SQL Source Control differently depending on which development model you're using: 不同的模式有不 ...