记录一个简单的HttpClient抓取页面内容

  现如今的网络时代,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()的方法获取。

时间: 2024-10-05 06:05:30

记录一个简单的HttpClient抓取页面内容的相关文章

[Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图

  第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果: 从程序来讲,步骤分为三步: 1.发起一个http请求,获取返回的response内容: 2.解析内容,分离出有效图片的url: 3.根据这些图片的url,生成图片保存至本地. 开始详细说明: 准备工作:HttpClient的Jar包,访问http://hc.apache.org/   自行下

PHP cURL库函数抓取页面内容

目录 1 为什么要用cURL? 2 启用cURL 3 基本结构 4 检查错误 5 获取信息 6 基于浏览器的重定向 7 用POST方法发送数据 8 文件上传 9 cURL批处理(multi cURL) 9.1 WordPress 链接检查器 10 另一些有用的cURL 选项 10.1 HTTP 认证 10.2 FTP 上传 10.3 代理/FQ请求 10.4 回调函数 11 小结 cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP.FTP.TELNET等,能

nodejs抓取页面内容,并分析有无某些内容的js文件

nodejs获取网页内容绑定data事件,获取到的数据会分几次相应,如果想全局内容匹配,需要等待请求结束,在end结束事件里把累积起来的全局数据进行操作! 举个例子,比如要在页面中找有没有www.baidu.com,不多说了,直接放代码: //引入模块 var http = require("http"), fs = require('fs'), url = require('url'); //写入文件,把结果写入不同的文件 var writeRes = function(p, r)

C#使用CSS选择器抓取页面内容

最近在查wpf绘图资料时,偶然看到python使用CSS器抓取网页的功能.觉得很强,这里用C#也实现一下. 先介绍一下CSS选择器 在 CSS 中,选择器是一种模式,用于选择需要添加样式的元素. 选择器 例子 例子描述 .class .intro 选择 class="intro" 的所有元素. #id #firstname 选择 id="firstname" 的所有元素. * * 选择所有元素. element p 选择所有 <p> 元素. elemen

爬虫-抓取页面内容

# -*- coding: UTF-8 -*- from HTMLParser import HTMLParser import sys,urllib2,string,re,json reload(sys) sys.setdefaultencoding('utf-8') class hp(HTMLParser): def __init__(self): self.readingdata_a = False self.title = [] self.usite = [] HTMLParser.__

PHP如何抓取https内容?记录一下。

PHP里做一般的获取内容时,用自带的file_get_contents()函数基本就足够了.当然,这个函数只能抓一些简单的数据,如果是遇到需要登录的页面,就不行了,而且效率及稳定性也不是很强.所以要是有特殊需求的话,还是用curl吧.不仅仅速度快,而且非常稳定,基本上用curl抓取失败的几率很小. 而且今天在抓优酷视频API接口中的信息时,发现了一个问题,由于优酷API的url请求是https安全协议,用file_get_contents()函数竟然无法获取到数据,然后用curl写了个代替函数,

使用jsoup爬虫抓取页面

httpclient 和jsoup都可以实现模拟浏览器抓取页面,前者发送请求,后者解析htm标签比较强大.本例直接使用jsoup实现请求和解析. package com.chongdong.log.test; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.jsoup.Connection; import org.jsoup.Connection.Method; impo

用PHP抓取页面并分析

在做抓取前,记得把php.ini中的max_execution_time设置的大点,不然会报错的. 一.用Snoopy.class.php抓取页面 一个挺萌的类名.功能也很强大,用来模拟浏览器的功能,可以获取网页内容,发送表单等. 1)我现在要抓取一个网站的列表页的内容,我要抓取的是全国的医院信息内容,如下图: 2)我很自然的将URL地址复制下来,用Snoopy类来抓取前10页的页面内容,而且将内容放到本地来,在本地建立html文件,等下用于分析. $snoopy=new Snoopy(); /

抓取页面需要登录时的session与cookie

考虑一个问题:如何抓取一个访问受限的网页?如校内好友的主页,个人新鲜事页面等. 显然,通过浏览器,我们可以手动输入用户名密码来访问目标页面,所谓“抓取”,只不过需要使用程序来模拟完成同样的工作,因此需要了解“登陆”过程中到底发生了什么. 对未登录用户,服务器强制用户跳转到登陆页面,用户键入用户名密码并提交,服务器将用户POST的信息与数据库中信息比对,如通过则跳转至landing page.那么在我们访问其他页面的时候,服务端如何判断我们的身份呢?由于HTTP协议是无状态的,显然,服务器不可能直