【API】Apache HttpClient HTTP协议的客户端/编程工具包

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

——————————

  • 提问:为什么要用HttpClient?
    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 .6(2015-09-11)

——————————

  • 提问:HttpClient能干嘛?

【模拟浏览器】发送HTTP请求,接收响应;
RPC接口调用;
爬取网页源码;(常用:HttpClient配合Jsoup可做网页爬虫)
批量事务请求;
…………

——————————

  • 提问:HttpClient是浏览器吗?

很多人有这样的观点:既然HttpClient是一个HTTP客户端编程工具,那不就相当于是一个浏览器了吗?无非它不能把HTML渲染出页面而已罢了;

其实HttpClient并非浏览器,他是一个HTTP通信库、一个工具包,因此它只提供一个通用浏览器应用程序所期望的功能子集;
HttpClient与浏览器最根本的区别是:
HttpClient中没有用户界面,浏览器需要一个渲染引擎来显示页面,并解释用户输入(例如鼠标点击显示页面上的某处之后如何响应、计算如何显示HTML页面、级联样式表和图像、javascript解释器运行嵌入HTML页面或从HTML页面引用的javascript代码、来自用户界面的事件被传递到javascript解释器进行处理等等等等);
HttpClient只能以编程的方式通过其API用于传输和接受HTTP消息,它对内容也是完全不可知的;
——————————————————————————————

通用模版

——————————
doGet
输入:URL、timeout
返回:URL的数据

public static String doGet(String url,int timeout) {
    CloseableHttpClient client = HttpClients.createDefault();
    HttpGet get = new HttpGet(url);
    HttpResponse response = null;

    HttpHost proxy = new HttpHost("xx.xx.xx",0000);

    RequestConfig config = RequestConfig
            .custom()
            .setConnectionRequestTimeout(timeout)
            .setConnectTimeout(timeout)
            .setSocketTimeout(timeout)
            .setRedirectsEnabled(true)
            .setProxy(proxy)
            .build();

    get.setConfig(config);

    try {
        response = client.execute(get);
        if (response.getStatusLine().getStatusCode() == 200){
            HttpEntity entity = response.getEntity();
            //System.out.println(EntityUtils.toString(entity,"utf-8"));
            return EntityUtils.toString(entity,"utf-8");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    if (response!=null || client!=null){
        try {
            ((CloseableHttpResponse) response).close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return null;
}

——————————
doPost
输入:URL、数据、timeout
输出:数据

public static String doPost(String url,String data,int timeout) {
    CloseableHttpClient cli

你可能感兴趣的:(API)