HttpClient入门

简介

HTTP(超文本传输协议)相信大家都已经很熟悉了,作为Internet上使用最多、最重要的协议之一,已经被越来越多的应用程序用来访问网络资源,目前使用最广泛的Java语言也不例外。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

HttpClient不是一个浏览器,而是一个客户端HTTP传输库,只能以编程的方式通过其API用于发送和接受HTTP消息。它不会尝试处理内容,也不会执行嵌入html页面的 JavaScript和尝试猜测内容类型(如果没有明确设置),或者重新格式化请求/重写位置URI或与HTTP传输无关的其他功能。

主要功能

  • 实现了所有 HTTP 的方法(GET、POST、PUT、DELETE等)
  • 支持 HTTPS 协议
  • 支持代理服务器
  • 支持自动转向等

使用步骤

HttpClient发送请求和接收响应,一般需要以下几个步骤。

  • 创建HttpClient实例对象
  • 创建某种连接方式的相应实例
  • 受用第一步创建的对象发送请求,并接受响应
  • 释放连接。

实例代码

首先我们在pom.xml中添加如下配置,以便我们使用HttpClient进行测试。

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.8</version>
</dependency>
  1. HTTP GET请求方法实例
package com.lincain.httpclient;

import java.net.URI;

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpGetExampleDemo {
	public static void main(String[] args) throws Exception{
		CloseableHttpClient httpClient = null;
		CloseableHttpResponse response = null;
		try {
			// 1.创建HttpClient实例对象
			httpClient = HttpClients.createDefault();
			
			// 2.创建GET连接方式的相应实例
			String url = "http://httpbin.org/get";
			URIBuilder builder = new URIBuilder(url);
			// 如果是get请求带参,需要添加一下代码,param:参数名称,value:参数值
			// builder.addParameter(param, value);
			// ......
			URI uri = builder.build();
			HttpGet httpGet = new HttpGet(uri);
            System.out.println("Executing request:" + httpGet.getRequestLine());
			System.out.println("-----------------");
			
			// 3.用第一步创建的对象发送请求,并接收响应
			response = httpClient.execute(httpGet);
			String responseString = null;
			int status = response.getStatusLine().getStatusCode();
			if (status >= 200 && status < 300) {
				responseString = EntityUtils.toString(response.getEntity());
			}
			System.out.println(responseString);
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if (response != null) {
					response.close();
				}
				// 4.释放连接,无论执行方法是否成功,都必须释放连接
				httpClient.close();
			} catch (Exception e2) {
				e2.getSuppressed();
			}
		}
	}
}

执行上述代码后,得到如下结果:

Executing request:GET http://httpbin.org/get HTTP/1.1
-----------------
{
  "args": {}, 
  "headers": {
    "Accept-Encoding": "gzip,deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "Apache-HttpClient/4.5.8 (Java/1.8.0_171)"
  }, 
  "origin": "171.88.28.143, 171.88.28.143", 
  "url": "https://httpbin.org/get"
}

在上述的代码中,我们使用GET方式向指定的URL:http://httpbin.org/get 发出请求,检索相应资源,完成后服务器向我们响应了一个json对象。

  1. HTTP POST请求方法实例
package com.taotao.test;

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class HttpPostExampleDemo {
	public static void main(String[] args) {
		CloseableHttpClient httpClient = null;
		CloseableHttpResponse response = null;
		try {
			// 1.创建HttpClient实例对象
			httpClient = HttpClients.createDefault();
			
			// 2.创建POST连接方式的相应实例
			String uri = "http://httpbin.org/post";
			HttpPost httpPost = new HttpPost(uri);
			httpPost.setEntity(new StringEntity("Hello HttpClient"));
			
			/*
			1. 设置实体方式1
			List<NameValuePair> paramList = new ArrayList<>();
			paramList.add(new BasicNameValuePair(key, value);
			....
			// 模拟表单
			UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
			httpPost.setEntity(entity);
			
			2. 设置实体方式2
			// 其中的json为json格式数据
			StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
			httpPost.setEntity(entity);
			*/
			System.out.println("Executing request:" + httpPost.getRequestLine());
			System.out.println("------------------");
			
			// 3.用第一步创建的对象发送请求,并接收响应
			response = httpClient.execute(httpPost);
			String responseString = "";
			int status = response.getStatusLine().getStatusCode();
			if (status >= 200 && status < 300) {
				responseString = EntityUtils.toString(response.getEntity());
			}
			System.out.println(responseString);
		}catch (Exception e) {
			e.printStackTrace();
		} 
		finally {
			try {
				if (response != null) {
					response.close();
				}
				// 4.释放连接,无论执行方法是否成功,都必须释放连接
				httpClient.close();
			} catch (Exception e2) {
				e2.getSuppressed();
			}
		}
	}
}

执行上述代码后,得到如下结果:

Executing request:POST http://httpbin.org/post HTTP/1.1
------------------
{
  "args": {}, 
  "data": "Hello HttpClient", 
  "files": {}, 
  "form": {}, 
  "headers": {
    "Accept-Encoding": "gzip,deflate", 
    "Content-Length": "16", 
    "Content-Type": "text/plain; charset=ISO-8859-1", 
    "Host": "httpbin.org", 
    "User-Agent": "Apache-HttpClient/4.5.8 (Java/1.8.0_171)"
  }, 
  "json": null, 
  "origin": "171.88.28.143, 171.88.28.143", 
  "url": "https://httpbin.org/post"
}

在上述的代码中,我们使用POST方式向指定的URL:http://httpbin.org/post 发出请求,将数据发布到服务器上,完成后服务器向我们响应了一个json对象。

总结

本文介绍了参考了HttpClient中文翻译文档和易百教程,对HttpClient的特性进行了简单介绍,并通过代码实例对GETPOST两种连接方式的使用方法进行演示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值