热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用httpClient下载网页

HttpCore对HTTP协议客户端编程做了一些基本的封装。例如,格式化请求头和解析响应头。LineFormatter用来格式化请求头信息,而实际的实现在BasicLineFormatter上。H

HttpCore

对HTTP协议客户端编程做了一些基本的封装。例如,格式化请求头和解析响应头。LineF ormatter用来格式化请求头信息,而实际的实现在BasicLineF ormatter

上。HttpResponseParser 解析响应头。

请求头信息封装在一个HttpParamS. BasicHttpParams使用一个散列表实现HttpParams
HttpProtocolParams包含特定的方法来设置参数,例如,设置HTTP协议版本号的setVersion方
法。org.apache.http.HttpVersion封装了所有可能的HTTP协议版本号。已经定义的HTTP协议
的版本有1.1/1.0/0.9。例如,使用HttpProtocolParams设置HTTP协议的版本为1.1。

HttpParams params = new BasicHttpParams();
//设置参数到params
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_l_l);

设置连接参数HttpParams.

HttpParams params = new BasicHttpParams();
//设置连接超时
HttpConnectionParams.setConnectionTimeout(params, 180 * 1000);
//设置Socket超时
HttpConnectionParams.setSoTimeout(params, 180 * 1000);
//设置Socket缓存大小
HttpConnectionParams.setSocketBufferSize(params, 8192);

HttpProtocolParams有设置客户端类型的setUserAgent方法。

//把参数设置成和IE7相同的
HttpProtocolParams.setUserAgent(params,
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");

HTTP协议处理器是一个协议拦截器的集合,实现了 “责任链”模式。每个协议拦截器工
作在这个拦截器负责的特定方面。例如,RequestTargetHost给请求头增加HOST信息,
RequestUserAgent 给请求头增加 USER_AGENT 信息。

HTTP响应是由服务器在接收和解释请求报文之后返回发送给客户端的报文。响应报文的
第一行包含了协议版本,之后是数字状态码和相关联的文本段。

HttpResponse respOnse= new BasicHttpResponse(HttpVersion.HTTP_1_1,
HttpStatus.SC_0K,
"OK");
System.out.println(response.getProtocolVersion());
//HTTP/1.1
System.out.println(response.getStatusLine().getStatusCode()); "200
System.out.println(response.getStatusLine().getReasonPhrase()); //OK
System.out.println(response.getStatusLine().toString()); //HTTP/1.1 200 OK

模拟浏览器

private static List getHeads() {
//头信息
String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2)";
List
headers = new ArrayList();
headers.add(
new BasicHeader("Accept-Charset","GB2312,utf-8;q=0.1, *;q=0.7"));
headers.add(
new BasicHeader("Accept-Language","zh-cn, zh;q=0.5"));
headers.add(
new BasicHeader("User-Agent",userAgent));
return headers;
}
List
headers = getHeads();
CloseableHttpClient httpclient
=
HttpClientBuilder.create().setDefaultHeaders(headers).build();

重试

HttpRequestRetryHandler接口决定执行HTTP请求时,碰到一个可恢复的异常后是否可以
重试。DefaultHttpRequestRetryHandler类实现3次重试,多重试2次的代码如下所示。

HttpRequestRetryHandler retryHandler =new StandardHttpRequestRetryHandler (5, true); //重试5次
CloseableHttpClient httpClient =HttpClientBuilder.create().setRetryHandler(retryHandler).build ();

修改超时设置的代码。

//配置
int socketTimeout = 5000;
int cOnnectionTimeout= 5000;
//求配置
RequestConfig requestCOnfig= RequestConfig.custom ()
.setConnectTimeout(connectionTimeout)
.setSocketTimeout(socketTimeout)
.build();
//创建客户端
HttpClient httpClient = HttpClientBuilder.create ()
.setDefaultRequestConfig(requestConfig).build();

 抓取压缩的网页

有些网站页面内容返回格式为gzip压缩格式,所以在得到返回结果后要判断内容是否压缩
过,如果是,则先要解压缩,然后解析内容。这样的网页返回的头信息会说明Content
-Encoding:gzip

参考:http://blog.csdn.net/qy20115549/article/details/52912532

 

抓取需要登录的网页

参考:http://www.cnblogs.com/Michael2397/p/7811699.html

代理

参考:http://www.cnblogs.com/Michael2397/p/7821930.html

 


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
author-avatar
teemitop
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有