zoukankan      html  css  js  c++  java
  • (一)问候 HttpClient

    第一节: HttpClient 简介

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

    官方站点:http://hc.apache.org/

    最新版本4.5 http://hc.apache.org/httpcomponents-client-4.5.x/

    官方文档: http://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/index.html

     maven地址:

    1 <dependency>
    2     <groupId>org.apache.httpcomponents</groupId>
    3     <artifactId>httpclient</artifactId>
    4     <version>4.5.2</version>
    5 </dependency>

    HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.5 (GA) (2015-09-11)

    我们搞爬虫的,主要是用HttpClient模拟浏览器请求第三方站点url,然后响应,获取网页数据,然后用Jsoup来提取我们需要的信息;


    第二节: HttpClient HelloWorld 实现

    HttpClient HelloWorld实现

    前面我们介绍了HttpClient 这个框架主要用来请求第三方服务器,然后获取到网页,得到我们需要的数据;

    所以今天搞个简单实例,让大家体验一把。

    首先建一个Maven项目,然后添加httpClient依赖,版本是4.5

    1 <dependency>
    2     <groupId>org.apache.httpcomponents</groupId>
    3     <artifactId>httpclient</artifactId>
    4     <version>4.5.2</version>
    5 </dependency>
     1 package com.javaxk.httpclient;
     2 
     3 import java.io.IOException;
     4 
     5 import org.apache.http.HttpEntity;
     6 import org.apache.http.ParseException;
     7 import org.apache.http.client.ClientProtocolException;
     8 import org.apache.http.client.methods.CloseableHttpResponse;
     9 import org.apache.http.client.methods.HttpGet;
    10 import org.apache.http.impl.client.CloseableHttpClient;
    11 import org.apache.http.impl.client.HttpClients;
    12 import org.apache.http.util.EntityUtils;
    13 
    14 public class HelloWorld {
    15     
    16     public static void main(String[] args) {
    17         CloseableHttpClient httpClient=HttpClients.createDefault(); // 创建httpClient实例
    18         HttpGet httpGet=new HttpGet("http://www.javaxk.com/"); // 创建httpget实例
    19         CloseableHttpResponse response = null;
    20         try {
    21             response = httpClient.execute(httpGet);    // 执行http get请求
    22         } catch (ClientProtocolException e) {    //http协议异常
    23             // TODO Auto-generated catch block
    24             e.printStackTrace();
    25         } catch (IOException e) {    //io异常
    26             // TODO Auto-generated catch block
    27             e.printStackTrace();
    28         }
    29         HttpEntity entity=response.getEntity(); // 获取返回实体
    30         try {
    31             System.out.println("网页内容:"+EntityUtils.toString(entity, "utf-8"));// 指定编码打印网页内容
    32         } catch (ParseException e) {    //解析异常
    33             // TODO Auto-generated catch block
    34             e.printStackTrace();
    35         } catch (IOException e) {    //io异常
    36             // TODO Auto-generated catch block
    37             e.printStackTrace();
    38         }
    39         try {
    40             response.close();    // response关闭
    41         } catch (IOException e) {    // io异常
    42             // TODO Auto-generated catch block
    43             e.printStackTrace();
    44         } 
    45         try {
    46             httpClient.close();        // httpClient关闭
    47         } catch (IOException e) {
    48             // TODO Auto-generated catch block
    49             e.printStackTrace();
    50         } 
    51     }
    52 
    53 }

    运行输出:

    这里得到了网站首页源码,当然要获得具体数据的话,要用到Jsoup,我们后面会讲解该技术;

    假如你对这些异常都熟悉 我们可以简化下,异常抛出,这样代码可读性好点。

     1 package com.javaxk.httpclient;
     2 
     3 import java.io.IOException;
     4 
     5 import org.apache.http.HttpEntity;
     6 import org.apache.http.client.ClientProtocolException;
     7 import org.apache.http.client.methods.CloseableHttpResponse;
     8 import org.apache.http.client.methods.HttpGet;
     9 import org.apache.http.impl.client.CloseableHttpClient;
    10 import org.apache.http.impl.client.HttpClients;
    11 import org.apache.http.util.EntityUtils;
    12 
    13 public class HelloWorld2 {
    14     
    15     public static void main(String[] args) throws ClientProtocolException, IOException {
    16         CloseableHttpClient httpClient=HttpClients.createDefault(); // 创建httpClient实例
    17         HttpGet httpGet=new HttpGet("http://www.javaxk.com/"); // 创建httpget实例
    18         CloseableHttpResponse response=httpClient.execute(httpGet); // 执行http get请求
    19         HttpEntity entity=response.getEntity(); // 获取返回实体
    20         System.out.println("网页内容:"+EntityUtils.toString(entity, "utf-8")); // 获取网页内容
    21         response.close(); // response关闭
    22         httpClient.close(); // httpClient关闭
    23     }
    24 
    25 }

    但是实际开发的话,我们对于每一种异常的抛出,catch里都需要做一些业务上的操作,所以以后用的话,还是第一种,假如爬虫任务很简单,容易爬取,并且量小,那就第二种。还是要根据具体情况来。

  • 相关阅读:
    【转】Maven实战(九)---模块聚合和继承
    【转】Maven实战(八)---模块划分
    Oracle ORA-01034,ORA-27101,ORA-00600
    【spring源代码分析】--Bean的解析与注冊
    ArcGIS For Flex报错
    江西省委常委赵智勇被免 无被查字眼 媒体推測窝案
    软考——(4)数据库
    matlab 2014a 改为英文版本号
    POJ 2299 Ultra-QuickSort (求序列的逆序对数)
    工厂方法模式(factory method pattern)
  • 原文地址:https://www.cnblogs.com/wishwzp/p/7059037.html
Copyright © 2011-2022 走看看