• 使用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

  • 相关阅读:
    InDesign 2022创建动态电子书和电子杂志
    如何在Mac上使用屏幕共享
    Mac终端程序背景如何设置为透明的?
    使用photoshop2021对有阴影的背光摄影照片进行调色修改
    Sketch如何实现背景局部模糊?
    苹果 macOS Monterey 12.3 开发者预览版 Beta 4 发布
    让Mac程序坞只显示正在运行的应用程序的方法
    Cornerstone 意外退出、打开闪退的解决办法
    windows下清理DNF缓存
    Centos7friewalld报错Failed to start firewalld dynamic firewall daemon
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7825430.html
Copyright © 2020-2023  润新知