Httpclient简介

Posted 邵鸿鑫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Httpclient简介相关的知识,希望对你有一定的参考价值。

什么是httpclient

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

下载地址:

http://hc.apache.org/

功能介绍

  以下列出的是 HttpClient 提供的主要的功能,要知道更多详细的功能可以参见 HttpClient 的主页。

(1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)

(2)支持自动转向

(3)支持 HTTPS 协议

(4)支持代理服务器等

导入依赖


执行GET请求

public class DoGET 

    public static void main(String[] args) throws Exception 

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        // 创建http GET请求
        HttpGet httpGet = new HttpGet("http://www.baidu.com/");

        CloseableHttpResponse response = null;
        try 
            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) 
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println("内容长度:" + content.length());
//                FileUtils.writeStringToFile(new File("C:\\\\baidu.html"), content);
            
         finally 
            if (response != null) 
                response.close();
            
            httpclient.close();
        

    



执行GET带参数

public class DoGETParam 

    public static void main(String[] args) throws Exception 

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        // 定义请求的参数
        URI uri = new URIBuilder("http://www.baidu.com/s").setParameter("wd", "java").build();

        System.out.println(uri);

        // 创建http GET请求
        HttpGet httpGet = new HttpGet(uri);

        CloseableHttpResponse response = null;
        try 
            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) 
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println(content);
            
         finally 
            if (response != null) 
                response.close();
            
            httpclient.close();
        

    



执行post请求

public class DoPOST 

    public static void main(String[] args) throws Exception 

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        // 创建http POST请求
        HttpPost httpPost = new HttpPost("http://www.oschina.net/");

        CloseableHttpResponse response = null;
        try 
            // 执行请求
            response = httpclient.execute(httpPost);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) 
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println(content);
            
         finally 
            if (response != null) 
                response.close();
            
            httpclient.close();
        

    


带参数的post请求

public class DoPOSTParam 

    public static void main(String[] args) throws Exception 

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        // 创建http POST请求
        HttpPost httpPost = new HttpPost("http://www.oschina.net/search");

        // 设置2个post参数,一个是scope、一个是q
        List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);
        parameters.add(new BasicNameValuePair("scope", "project"));
        parameters.add(new BasicNameValuePair("q", "java"));
        // 构造一个form表单式的实体
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
        // 将请求实体设置到httpPost对象中
        httpPost.setEntity(formEntity);

        CloseableHttpResponse response = null;
        try 
            // 执行请求
            response = httpclient.execute(httpPost);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) 
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println(content);
            
         finally 
            if (response != null) 
                response.close();
            
            httpclient.close();
        

    


封装HttpClient通用工具类

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);
	



以上是关于Httpclient简介的主要内容,如果未能解决你的问题,请参考以下文章

httpClient4.5 closeableHttpClient用法

httpclient之入门使用

JAVA - HttpClient(JDK11)

httpClient

HttpClient-4.3.X 中get和post方法使用

HttpClient使用详解与实战一:普通的GET和POST请求