记录一个简单的HttpClient抓取页面内容
发布日期:2021-08-13 04:05:41 浏览次数:5 分类:技术文章

本文共 3895 字,大约阅读时间需要 12 分钟。

  现如今的网络时代,HTTP协议如此重要,随着java的发展,也越来越多的人采用java直接通过HTTP协议访问网络资源,虽然java.net提供了基本的访问HTTP协议的基本功能,但是对于大部分应用程序来说,仍旧还有许多功能不能够灵活使用;HttpClient是Apache Jakarta Common 下的子项目,一个提供访问HTTP协议的java工具包,提供了更多、更快捷、丰富的方法,HttpClient主要常用的功能有:实现了所有 HTTP 的方法(GET,POST,PUT,HEAD,DELETE 等); 支持重定向;支持HTTPS;支持代理服务器。;因此对于HttpClient就有了解一些的必要了,前一个公司用它来动态登录与之借口的其他系统并抓取数据,当时谢了一个小例子,就是下面的程序,

简单的获取一个网页的内容: 

HttpClient client = new HttpClient();       try {           GetMethod get = new GetMethod("http://www.baidu.com");           System.out.println("executing request " + get.getURI());           client.executeMethod(get);                     int statuscode = get.getStatusCode();           System.out.println("status:"+statuscode);                     if(statuscode == HttpStatus.SC_OK) {              html = get.getResponseBodyAsString();           }           System.out.println(html);           get.releaseConnection();       } catch (Exception e) {           // TODO: handle exception       }

  GetMethod()可以有两种方式,第一种是直接像以上的例子传入整个url地址new GetMethod("http://www.baidu.com");另一种可以先设定host和port,PostMethod post = new PostMethod("/jsp/login.jsp");

client.getHostConfiguration().setHost(host, port);

然后调用httpclient的executeMethod执行。getStateCode获取状态码

 另外可以用post方法实现后台模拟登陆:

 

HttpClient client = new HttpClient();       try {           String host = "localhost";           int port = 8080;           PostMethod post = new PostMethod("/jsp/login.jsp");           client.getHostConfiguration().setHost(host, port);                     System.out.println("executing request " + post.getURI());                     NameValuePair name1=new NameValuePair("username","000001");           NameValuePair name2=new NameValuePair("password","888888");           post.setRequestBody(new NameValuePair[]{name1,name2});                     try {              client.executeMethod(post);           } catch (Exception e) {              e.printStackTrace();           }                     int statuscode = post.getStatusCode();           System.out.println("status:"+statuscode);                     if(statuscode == HttpStatus.SC_OK) {              html = post.getResponseBodyAsString();           } else if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||                    (statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||                    (statuscode == HttpStatus.SC_SEE_OTHER) ||(statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {                    //读取新的URL地址                    Header header = post.getResponseHeader("location");                                       if(header != null) {                        String newuri = header.getValue();                        System.out.println("newuri:"+newuri);                        if ((newuri == null) || (newuri.equals(""))) {                            newuri = "/";                        }                        GetMethod get = new GetMethod(newuri);                                               try {                            client.executeMethod(get);                        } catch (Exception e) {                         e.printStackTrace();                     }                        byte[] readbody = get.getResponseBody();                        String response = new String(readbody);                                               System.out.println("=================================================");                        System.out.println(response);                        System.out.println("=================================================");                                               get.releaseConnection();                    }           }           System.out.println(html);           post.releaseConnection();       } catch (Exception e) {           // TODO: handle exception       }       return html;

 在使用NameValuePair封装数据,采用舌头setRequestBody()发送数据时,若想在前端页面获取所传送的数据,可采用request.getParameter()的方法获取。 

转载于:https://www.cnblogs.com/vindanear/p/5295262.html

转载地址:https://blog.csdn.net/weixin_30675247/article/details/99002216 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:如何通过js实现页面光标位置的控制
下一篇:学习日记-从爬虫到接口到APP

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月13日 18时58分38秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

Struts2的拦截器,Struts2的执行流程,图解+详解(底层代码)以及 自定义拦截器(配置和使用) 2019-04-26
Struts2的标签库大全(案例+用法+解析) 2019-04-26
Struts2数据有效性的校验的两种方式,Struts2数据校验(案例+解析) 2019-04-26
Struts2的国际化 全局的国际化:(JSP,Action,配置文件)Action范围的国际化:包范围的国际化:临时的国际化 2019-04-26
Spring的IOC的注解开发(案例+解析) 2019-04-26
Spring的AOP(面向切面编程)的XML开发以及Spring的AOP的底层原理(案例+解析) 2019-04-26
Spring的切入点AspectJ表达式(解析) 2019-04-26
Spring的AOP的注解开发,基于AspectJ的注解开发 2019-04-26
Spring的事务管理(解析+转账案例) 2019-04-26
SSH框架整合:延迟加载问题的解决 2019-04-26
SVN:自己搭建源代码的版本控制系统(服务端VISUALSVN+客户端TortoiseSVN安装和使用)模拟客户使用的过程(使用大全) 2019-04-26
环境搭建 + 用户登录注册| CRM客户关系管理系统项目实战一(Struts2+Spring+Hibernate)解析+源代码 2019-04-26
Java Web项目源代码|CRM客户关系管理系统项目实战(Struts2+Spring+Hibernate)解析+源代码+教程 2019-04-26
客户管理模块(保存查询客户)| CRM客户关系管理系统项目实战二(Struts2+Spring+Hibernate)解析+源代码 2019-04-26
客户管理模块(文件上传-图片/删除-修改客户/条件查询客户)| CRM客户关系管理系统项目实战三(Struts2+Spring+Hibernate)解析+源代码 2019-04-26
联系人管理-查询列表| CRM客户关系管理系统项目实战四(Struts2+Spring+Hibernate)解析+源代码 2019-04-26
联系人管理-添加/修改/删除联系人/条件查询/解决与客户之间的问题| CRM客户关系管理系统项目实战五(Struts2+Spring+Hibernate)解析+源代码 2019-04-26
联系人管理-抽取通用DAO| CRM客户关系管理系统项目 实战六(Struts2+Spring+Hibernate)解析+源代码 2019-04-26
Exception Report node to traverse cannot be null! The server encountered an unexpected condition 2019-04-26
联系人管理-客户拜访记录| CRM客户关系管理系统项目 实战七(Struts2+Spring+Hibernate)解析+源代码 2019-04-26