利用HttpClient写的一个简单页面获取
之前就听说过利用网络爬虫来获取页面,感觉还挺有意思的,要是能进行一下偏好搜索岂不是可以满足一下窥探欲。
后来从一本书上看到用HttpClient来爬取页面,虽然也有源码,但是也没说用的HttpClient是哪个版本的,而且HttpClient版本不一样,导致后面很多类也不一样。于是下载了最新的HttpCient版本,并且对着tutorial和网上的文档试着写一个简单的获取页面的例子,最终证明是可行的,但是也遇到了不少问题,而且这个例子也十分简单。
import java.io.IOException;
import java.net.UnknownHostException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream; import org.apache.http.HttpEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.message.AbstractHttpMessage; public class Simplest {
private void Get() {
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
String HostName = "http://www.baidu.com";
HttpGet httpget = new HttpGet(HostName);
System.out.println(httpget.getURI());
//HttpGet httpget = new HttpGet("http://www.lietu.com");
CloseableHttpResponse response = httpclient.execute(httpget);
System.out.println("Successful!");
System.out.println(response.getProtocolVersion()); //Protocol Version
System.out.println(response.getStatusLine().getStatusCode()); //Status Code
System.out.println(response.getStatusLine().getReasonPhrase());
System.out.println(response.getStatusLine().toString()); //get entity
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream input = entity.getContent();
String filename = HostName.substring(HostName.lastIndexOf('/')+1);
System.out.println("The filename is: " + filename);
OutputStream output = new FileOutputStream(filename); int tempByte=-1;
while ((tempByte=input.read())>0) {
output.write(tempByte);
} if (input != null) {
input.close();
} if (output != null) {
output.close();
}
}
} catch(UnknownHostException e) {
System.out.println("No such a host!");
} catch(IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
Simplest a = new Simplest();
a.Get();
System.out.println("This is a test");
}
}
代码倒是不长,刚开始搞这个啥也不懂,不过最后还是获取了页面,感觉挺有意思的。
代码编译需要两个jar包,httpclient-4.5.2.jar和httpcore-4.4.4.jar将其和源文件Simplest.java放到同一个目录下。
编译过程为:javac -cp httpcore-4.4.4.jar:httpclient-4.5.2.jar Simplest.java
运行过程为:java -cp .:httpclient-4.5.2.jar:httpcore-4.4.4.jar:Simplest:commons-logging-1.2.jar Simplest
之前也搜了好久在命令行怎么导入jar包之类的,基础不牢就是这样的。
接下来的工作就是从简单到复杂,不断扩充爬虫的能力和功能了,包括页面信息提取等。
利用HttpClient写的一个简单页面获取的更多相关文章
- apue编程之参考du代码利用递归写的一个简单的du命令的源代码
#include <stdio.h> #include <stdlib.h> #include <glob.h> #include <string.h> ...
- Extjs6(三)——用extjs6.0写一个简单页面
本文基于ext-6.0.0 一.关于border布局 在用ext做项目的过程中,最常用到的一种布局就是border布局,现在要写的这个简单页面也是运用border布局来做.border布局将页面分为五 ...
- 自己写的一个简单PHP采集器
自己写的一个简单PHP采集器 <?php //**************************************************************** $url = &q ...
- 只是一个用EF写的一个简单的分页方法而已
只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...
- 写了一个简单的CGI Server
之前看过一些开源程序的源码,也略微知道些Apache的CGI处理程序架构,于是用了一周时间,用C写了一个简单的CGI Server,代码算上头文件,一共1200行左右,难度中等偏上,小伙伴可以仔细看看 ...
- 写了一个简单可用的IOC
根据<架构探险从零开始写javaweb框架>内容写的一个简单的 IOC 学习记录 只说明了主要的类,从上到下执行的流程,需要分清主次,无法每个类都说明,只是把整个主线流程说清楚,避免 ...
- 写了一个简单的 Mybatis
写了一个简单的 Mybatis,取名 SimpleMybatis . 具备增删改查的基本功能,后续还要添加剩下的基本数据类型和Java集合类型的处理. 脑图中有完整的源码和测试的地址 http://n ...
- 基于Spring aop写的一个简单的耗时监控
前言:毕业后应该有一两年没有好好的更新博客了,回头看看自己这一年,似乎少了太多的沉淀了.让自己做一个爱分享的人,好的知识点拿出来和大家一起分享,一起学习. 背景: 在做项目的时候,大家肯定都遇到对一些 ...
- 今天写了一个简单的新浪新闻RSS操作类库
今天,有位群友问我如何获新浪新闻列表相关问题,我想,用正则表达式网页中取显然既复杂又不一定准确,现在许多大型网站都有RSS集合,所以我就跟他说用RSS应该好办一些. 一年前我写过一个RSS阅读器,不过 ...
随机推荐
- kubectl命令使用
语法: kubectl [command] [TYPE] [NAME] [flags] 1 command:子命令,用于操作Kubernetes集群资源对象的命令,如create, de ...
- 【LeetCode】71. Simplify Path
Simplify Path Given an absolute path for a file (Unix-style), simplify it. For example,path = " ...
- Python学习笔记015——文件file的常规操作之三(标准输入输出文件)
1 标准输入输出文件 在Python中,模块sys中含有标准的输入输出文件 sys.stdin 标准输入方法(一般是键盘) sys.stdout 标准输出方法(到显示器的缓冲输出) sys ...
- OAF_OAF编译代码至应用详解(案例)
201-06-01 Created By BaoXinjian
- Python 字典 copy()方法
描述 Python 字典 copy() 方法返回一个字典的浅拷贝(父不变,子变). 语法 copy() 方法语法: D.copy() 参数 无. 返回值 返回一个字典的浅拷贝(父不变,子变). 实例 ...
- C# ASE加密解密
项目中比较常用的加密手段 /// <summary> /// ASE_128_ECB_无填充_64Base_加密函数 /// </summary> /// <param ...
- jquery.dataTables的用法
写页面前端时,使用表格的插件可以快速漂亮的排版.本例子中使用jquery.dataTables来处理table.直接来点干货 html代码如下 <table cellpadding=" ...
- Java总结篇系列:Java多线程(四)
ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地 ...
- 《Effective Java》读书笔记四(泛型)
Java1.5发行版本中增加了泛型(Generic).在没有泛型之前,从集合中读取到的每一个对象都必须进行转换.如果有人不小心插入了错误的类型对象,在运行时的转换处理就会出错.有了泛型之后,可以告诉编 ...
- 【Android】3.17 示例17--周边雷达功能
分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 周边雷达功能同步支持Android和iOS端.它本质是一个连接百度LBS开放平台前端SDK产品和后端 ...