zoukankan      html  css  js  c++  java
  • 【Ts 5】Httpclient的应用和封装

    一、基本概述

    1.1,什么是Httpclient

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

    这只是简单介绍,详细了解:Httpclient home

    特别注意:

    The Commons HttpClient project is now end of life, and is no longer being developed. It has been replaced by the Apache HttpComponents project in its HttpClient and HttpCore modules, which offer better performance and more flexibility.

    简单点说,就是最好使用HttpComponents,它在Httpclient的基础上,提供了更好的服务!  


    1.2,Httpclient有什么用

    简单总结来说,有以下四个功能:

    (1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)
    (2)支持自动转向
    (3)支持 HTTPS 协议
    (4)支持代理服务器等

    PS:建议查看文档:Httpclient features  ,简单又粗暴的说法就是,当你部署好了一个rest风格的接口服务,可以使用这个httpclient工具,进行接口访问以获取数据!


    1.3,怎么用

    使用 HttpClient 需要以下 6 个步骤:
    1. 创建 HttpClient 的实例
    2. 创建某种连接方法的实例,在这里是GetMethod。在 GetMethod 的构造函数中传入待连接的地址
    3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例
    4. 读 response
    5. 释放连接。无论执行方法是否成功,都必须释放连接
    6. 对得到后的内容进行处理

    简单示例代码:

    <span style="font-family:KaiTi_GB2312;font-size:18px;">	public void doGetWithParam() throws Exception{
    		//创建一个httpclient对象
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    		//创建一个uri对象
    		URIBuilder uriBuilder = new URIBuilder("http://www.sogou.com/web");
    		uriBuilder.addParameter("query", "花千骨");
    		HttpGet get = new HttpGet(uriBuilder.build());
    		//执行请求
    		CloseableHttpResponse response = httpClient.execute(get);
    		//取响应的结果
    		int statusCode = response.getStatusLine().getStatusCode();
    		System.out.println(statusCode);
    		HttpEntity entity = response.getEntity();
    		String string = EntityUtils.toString(entity, "utf-8");
    		System.out.println(string);
    		//关闭httpclient
    		response.close();
    		httpClient.close();
    	}</span>


    二、代码封装

    前提:maven导入依赖:


    <span style="font-family:KaiTi_GB2312;font-size:18px;">package com.taotao.common.utils;
    
    import java.io.IOException;
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.utils.URIBuilder;
    import org.apache.http.entity.ContentType;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    public class HttpClientUtil {
    
    	public static String doGet(String url, Map<String, String> param) {
    
    		// 创建Httpclient对象
    		CloseableHttpClient httpclient = HttpClients.createDefault();
    
    		String resultString = "";
    		CloseableHttpResponse response = null;
    		try {
    			// 创建uri
    			URIBuilder builder = new URIBuilder(url);
    			if (param != null) {
    				for (String key : param.keySet()) {
    					builder.addParameter(key, param.get(key));
    				}
    			}
    			URI uri = builder.build();
    
    			// 创建http GET请求
    			HttpGet httpGet = new HttpGet(uri);
    
    			// 执行请求
    			response = httpclient.execute(httpGet);
    			// 判断返回状态是否为200
    			if (response.getStatusLine().getStatusCode() == 200) {
    				resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if (response != null) {
    					response.close();
    				}
    				httpclient.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    		return resultString;
    	}
    
    	public static String doGet(String url) {
    		return doGet(url, null);
    	}
    
    	public static String doPost(String url, Map<String, String> param) {
    		// 创建Httpclient对象
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    		CloseableHttpResponse response = null;
    		String resultString = "";
    		try {
    			// 创建Http Post请求
    			HttpPost httpPost = new HttpPost(url);
    			// 创建参数列表
    			if (param != null) {
    				List<NameValuePair> paramList = new ArrayList<>();
    				for (String key : param.keySet()) {
    					paramList.add(new BasicNameValuePair(key, param.get(key)));
    				}
    				// 模拟表单
    				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
    				httpPost.setEntity(entity);
    			}
    			// 执行http请求
    			response = httpClient.execute(httpPost);
    			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				response.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    
    		return resultString;
    	}
    
    	public static String doPost(String url) {
    		return doPost(url, null);
    	}
    	
    	public static String doPostJson(String url, String json) {
    		// 创建Httpclient对象
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    		CloseableHttpResponse response = null;
    		String resultString = "";
    		try {
    			// 创建Http Post请求
    			HttpPost httpPost = new HttpPost(url);
    			// 创建请求内容
    			StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
    			httpPost.setEntity(entity);
    			// 执行http请求
    			response = httpClient.execute(httpPost);
    			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				response.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    
    		return resultString;
    	}
    }
    </span>


    IT界,最悲痛的事儿,莫过于,我错过了Struts1,我错过了Struts2,而我还将继续错过MVC。。。。很多东西在我刚知道的时候,发现人家已经过时了。这个行业发展的太快了,不进则退,奋斗吧,少年!

  • 相关阅读:
    存储过程为参数NULL时的处理方法
    查询数据占比
    ROW_NUMBER() OVER()函数用法;(分组,排序),partition by
    存储过程 set 和 select 对变量赋值的区别 (转自Theo)
    对布尔值取反,使用 ~
    创建存储过程
    JavaScript验证密码强度
    一些简单的JavaScript的方法
    递归方式实现树的展示形式
    ASP.NET验证控件详解
  • 原文地址:https://www.cnblogs.com/hhx626/p/7534627.html
Copyright © 2011-2022 走看看