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下载网页的更多相关文章

  1. 【搜索引擎Jediael开发笔记2】使用HttpClient下载网页至本地文件

    本文使用HttpClient根据url进行网页下载.其中 (1)HttpClient的相关知识请参见HttpClient基础教程 (2) package org.ljh.search.download ...

  2. Python下载网页的几种方法

    get和post方式总结 get方式:以URL字串本身传递数据参数,在服务器端可以从'QUERY_STRING'这个变量中直接读取,效率较高,但缺乏安全性,也无法来处理复杂的数据(只能是字符串,比如在 ...

  3. JavaWeb学习之转发和重定向、会话技术:cookie、session、验证码实例、URLConnection使用(下载网页)(4)

    1.转发和重定向 HttpServletResponse response 转发: RequestDispatcher dispatcher = request.getRequestDispatche ...

  4. Android采用HttpClient下载图片

    在上一章中谈到Android采用HttpURLConnection下载图片,本章使用HttpClient下载图片 HttpURLConnection与HttpClient的差别: HttpClient ...

  5. windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码

    原文:windows phone 7,sliverlight 下载网页的解析,关于wp7 gb2312编码 关于silverlight和wp7(windows phone 7)是默认不支持gb2312 ...

  6. Java的URL来下载网页源码

    import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; impor ...

  7. http下载网页

    //http.c #include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/ ...

  8. PHP下载网页

    <?php /*   author:whq   作用:获取网页的内容 */   include "../Snoopy/Snoopy.class.php";class Cute ...

  9. Java如何读取和下载网页?

    在Java编程中,如何读取和下载网页? 以下示例显示如何使用net.URL类的URL()构造函数来读取和下载网页. package com.yiibai; import java.io.Buffere ...

随机推荐

  1. Java EJB JBoss

    JBoss:JBoss是web服务器的一种,主要做EJB容器,和tomcat集成就可以jsp,servlet,ejb通吃了JBoss有两种版本,一种是独立的,一种是和tomcat集成的,当然都是免费的 ...

  2. Logistic Regression 笔记与理解

    Logistic Regression 笔记与理解 Logistic Regression Hypothesis 记为 H(theta) H(theta)=g(z) 当中g(z),是一个叫做Logis ...

  3. JAVA学习之路与大家分享

    这是我四年以前总结的JAVA学习之路,希望对初学者或想从事JAVA开发的人有帮助. 本人是软件工程专业出身,先后学过C.C++.JAVA.VB.delphi等等开发语言以及网络相关管理技术.哎,好久不 ...

  4. 图像处理之图像增强项目---csdn去雾专栏1

    (一)高斯低通滤波去噪 高斯低通滤波器(Gaussian Low Pass Filter)是一类传递函数为高斯函数的线性平滑滤波器.又由于高斯函数是正态分布的密度函数.因此高斯低通滤波器对于去除服从正 ...

  5. HDU 6166 Senior Pan 二进制分组 + 迪杰斯特拉算法

    Senior Pan Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Probl ...

  6. httpclient4 模拟访问网页 模拟登录 简单例子

    JAVA后台模拟登录一个网站,获得一定权限后进一步操作. 所用的工具: Apache HttpComponents client 4.3版本 以下为代码: import org.apache.http ...

  7. 小程序 富文本 的页面展示 json 数据处理 go-echo 为小程序提供feed流服务

    go生成页面 返回给web-view {{define "DBHtmlCode"}} <!DOCTYPE html> <html lang="zh-cm ...

  8. ZeroMQ Distributed Messaging

    ZeroMQ \zero-em-queue\, \ØMQ\: Ø  Connect your code in any language, on any platform. Ø  Carries mes ...

  9. 活动推荐 | 听说 PHP 是最好的语言 - 和 OneAPM 一起參与上海 PHPCon 技术盛宴吧

    2015年7月11日,第三届 PHP 大会就要和各位 PHPer 正式见面了.本年度,由 Think 技术社区主办,OneAPM 赞助的 PHPCon2015 是为全部热爱技术的 PHPer 提供的最 ...

  10. ios怎样在一个UIImageButton的里面加一些自己定义的箭头

    能够採用例如以下方法,写一个函数: -(UIImage*) getOneImageButtonWithArrow{ //tmpView做附控件 UIView *tmpView = [[UIView a ...