在使用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. JS判断浏览器类型和屏幕分辨率来调用不同的CSS样式

    代码如下: <!-- if (window.navigator.userAgent.indexOf("MSIE")>=1) { var IE1024="&qu ...

  2. nyoj_102_次方求模_201308221547

    次方求模时间限制:1000 ms  |  内存限制:65535 KB 难度:3描述 求a的b次方对c取余的值 输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一行,其中有三 ...

  3. iOS: 在Swift中优雅的实现Substring

    在Swift中,当我们想要截取某个字符串时,方法如下: let carNumber = "沪A12345" let startIndex = advance(userCar.car ...

  4. Shredding Company (hdu 1539 dfs)

    Shredding Company Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. 本地项目上传虚拟机的gitlab

    前提:在虚拟机安装了gitlab服务,并且本机可以访问到虚拟机的gitlab 自己本机项目上传到gitlab 1.先在gitlab上建立项目 拷贝项目地址: http://192.168.1.105/ ...

  6. C++ 移位运算与进制转换 浅析

    移位运算包括"逻辑移位"(logical shift)和"算术移位"(arithmetic shift). 逻辑移位:移出去的位丢弃,空缺位(vacant bi ...

  7. HTML文档基础

    一.HTML(Hyper Text Markup Language超文本标记语言)是一种用来制作超文本文档的简单标记语言,HTML在正文的文本中编写各种标记,通过Web浏览器进行编译和运行才干正确显示 ...

  8. Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决

    Java之POI读取Excel的Package should contain a content type part [M1.13]] with root cause异常问题解决 引言: 在Java中 ...

  9. golang文件读写三种方式——bufio,ioutil和os.create

    package main import ( "bufio" "fmt" "io/ioutil" "os" ) func ...

  10. Head First 设计模式 —— 策略设计模式

    创建一个能够根据所传递的参数对象的不同而具有不同行为(动态绑定的多态机制)的方法,被称为策略设计模式.