使用httpClient下载网页
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<Header> getHeads() {
//头信息
String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2)";
List<Header> headers = new ArrayList<Header>();
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<Header> 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
使用httpClient下载网页的更多相关文章
- 【搜索引擎Jediael开发笔记2】使用HttpClient下载网页至本地文件
本文使用HttpClient根据url进行网页下载.其中 (1)HttpClient的相关知识请参见HttpClient基础教程 (2) package org.ljh.search.download ...
- Python下载网页的几种方法
get和post方式总结 get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在 ...
- JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)
1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatche ...
- Android采用HttpClient下载图片
在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...
- windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码
原文:windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码 关于silverlight和wp7(windows phone 7)是默认不支持gb2312 ...
- Java的URL来下载网页源码
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; impor ...
- http下载网页
//http.c #include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/ ...
- PHP下载网页
<?php /* author:whq 作用:获取网页的内容 */ include "../Snoopy/Snoopy.class.php";class Cute ...
- Java如何读取和下载网页?
在Java编程中,如何读取和下载网页? 以下示例显示如何使用net.URL类的URL()构造函数来读取和下载网页. package com.yiibai; import java.io.Buffere ...
随机推荐
- UVA 610 - Street Directions(割边)
UVA 610 - Street Directions option=com_onlinejudge&Itemid=8&page=show_problem&category=5 ...
- java 最长回文字串
package string.string1_6; public class LongestPalidrome { /** * 使用常规方法, 以字符串的每一个字符作为中心进行判断, 包括奇数和偶 ...
- HDU 5145 NPY and girls (莫队分块离线)
题目地址:HDU 5145 莫队真的好奇妙.. 这种复杂度竟然仅仅有n*sqrt(n)... 裸的莫队分块,先离线.然后按左端点分块,按块数作为第一关键字排序.然后按r值作为第二关键字进行排序. 都是 ...
- React机制浅析
在写React代码时,避免不了提前想想页面的结构,当然这也属于HTML布局了,比如哪些组件里需要包含哪些组件.遂突发奇想,如果试着把子组件的render内容替换原组件,会是个啥? 比如拿 https: ...
- asp.net core 初探 二
今天用@宇内流云大大的jexus 体验一下生产环境的发布,运行. 生产环境: centos 7 jexus 5.8.1 独立版 包含了mono (mono安装真心痛苦……) 开发环境就是昨天的Ubun ...
- 通过代码实现自动判断是手机端还是PC端跳转
<!-- 2017/09/13 跳转手机页面 start by 小鬼PSer --> <meta name="mobile-agent" content=&quo ...
- 实记处理mongodb的NUMA问题
一次在启动mongodb的过程中,出现过NUMA这个问题, mongodb日志显示如下: WARNING: You are running on a NUMA machine. We suggest ...
- windows下route命令详解(转载)
1.具体功能 该命令用于在本地IP路由表中显示和修改条目.使用不带参数的ROUTE可以显示帮助. 2.语法详解 route [-f] [-p] [co ...
- mvc 发送QQ邮件
试图部分代码: @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } ...
- 九度OJ 1109:连通图 (最小生成树)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2783 解决:1432 题目描述: 给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的. 输入: 每组数据的第一行是两个整数 n ...
