利用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阅读器,不过 ...
随机推荐
- oracle-imp导入小错filesize设置
***********************************************声明*************************************************** ...
- A. Dreamoon and Stairs(Codeforces Round #272)
A. Dreamoon and Stairs time limit per test 1 second memory limit per test 256 megabytes input standa ...
- TCP/IP协议栈--IP首部选项字段的分析
IP输入函数(ipintr)将在验证分组格式(检验和,长度等)之后.确定分组是否到达目的地之前,对选项进行处理. 这表明分组所 遇到的每一个路由器以及终于的目的主机都对要分组的选项进行处理. IP分组 ...
- springmvc中同步/异步请求参数的传递以及数据的返回
注意: 这里的返回就是返回到jsp页面 **** controller接收前台数据的方式,以及将处理后的model 传向前台***** 1.前台传递数据的接受:传的属性名和javabean的属性相同 ...
- HDUOJ---(2203)亲和串
亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- leetcode48:矩阵旋转
题目链接 输入一个N×N的方阵,要求不开辟新空间,实现矩阵旋转. 将点(x,y)绕原点顺时针旋转90度,变为(y,-x).原来的(-y,x)变为(x,y) class Solution(object) ...
- Block编程注意的问题
一,前言 block 是在 iOS 4 中引入的新特性,它和 C++ 11 中的 lamba 表达式概念相似,有时候也被称为闭包.经过一段时间的使用,我发现要用对用好 block 还是有不少需要注 ...
- UltraEdit打开中文乱码
http://hellofs.blog.51cto.com/6109153/1187548 UltraEdit很强大,但是今天发现在打开含有中文的文本时会乱码,还是在配置里找找相关的设置,可以在如图的 ...
- JS定义类及对象
1.工厂方式 <script type="text/javascript"> function createObject(name){ var p = new Obje ...
- C# 采用钩子捕获键盘和鼠标事件-验证是否处于无人操作状态
原文地址:https://www.cnblogs.com/gc2013/p/4036414.html 全局抽象类定义 using System; using System.Collections.Ge ...