Java开源框架类库介绍(一)--HttpComponents

Apache HttpClient 5 使用详细教程 转存失败重新上传取消超文本传输协议(HTTP)可能是当今互联网上最重要的协议之一,Web 服务、微服务以及支持网络的各种设备上的服务几乎都是 HTTP 协议,HTTP 协议已经从 Web 浏览器走向了更广泛的使用场景。虽然java.net包已经提供了 HTTP 访问资源的基本功能,但是它不够灵活,而且不能随心所欲的进行自定义。... 阅读详情

我们在开发过程中经常会使用到HTTP协议作为我们数据交换的协议,本小节主要介绍一个开源的HTTP组件的使用。


1. 环境配置

1.1 下载安装

HTTP Components是Apache的一个子项目,地址是: http://hc.apache.org/,主页中提供下载。使用过程及其简单,解压缩后直接将其lib目录下文件拷贝到classpath下即可。

1.2 使用Maven管理

如果您使用Maven管理你的项目,需要这样配置:

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>${httpcomponents.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpmime</artifactId>
			<version>${httpcomponents.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>fluent-hc</artifactId>
			<version>${httpcomponents.version}</version>
		</dependency>


2. 示例代码

2.1 最简单的例子

最简单的例子当然是实现请求的处理,下面分别是GET和POST:
	public void simpleGet() {
		HttpGet get = new HttpGet("http://www.baidu.com");

		try (CloseableHttpClient httpClient = new DefaultHttpClient();
				CloseableHttpResponse response = httpClient.execute(get);) {
			handleResponse(response);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void simplePost() {
		HttpPost post = new HttpPost("http://www.baidu.com");
		try (CloseableHttpClient httpClient = new DefaultHttpClient();
				CloseableHttpResponse response = httpClient.execute(post);) {
			handleResponse(response);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
注意我的代码使用了JDK 1.7的try语句块新特性,如果低于1.7版本请自行修改代码。


下面是处理响应的代码:
	private void handleResponse(HttpResponse response) throws IOException {
		int statusCode = 0;
		if ((statusCode = response.getStatusLine().getStatusCode()) == 200) {
			HttpEntity entity = response.getEntity();
			System.out.println(entity.getContentType());
			System.out.println(entity.getContentEncoding());
			System.out.println(entity.getContentLength());

			try (InputStream ins = response.getEntity().getContent();) {
				BufferedReader reader = new BufferedReader(
						new InputStreamReader(ins));
				String str = null;
				while ((str = reader.readLine()) != null) {
					System.out.println(str);
				}
			}
		} else {
			System.out.println("------------http error: statusCode is: "
					+ statusCode);
		}
	}

2.2 增加URI方式

简单的一个请求我们可以处理,那么如果这个请求中需要包含参数呢?下面是代码:
	public void simpleURIGet() throws URISyntaxException {
		URI uri = new URIBuilder().setScheme("http").setHost("www.google.com")
				.setPath("/search").setParameter("q", "httpclient")
				.setParameter("btnG", "Google Search").setParameter("aq", "f")
				.setParameter("oq", "").build();
		HttpGet get = new HttpGet(uri);
		System.out.println(get.getURI());

		try (CloseableHttpClient httpClient = new DefaultHttpClient();
				CloseableHttpResponse response = httpClient.execute(get);) {
			handleResponse(response);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void simpleURIPost() throws URISyntaxException {
		URI uri = new URIBuilder().setScheme("http").setHost("www.google.com")
				.setPath("/search").setParameter("q", "httpclient")
				.setParameter("btnG", "Google Search").setParameter("aq", "f")
				.setParameter("oq", "").build();
		HttpPost post = new HttpPost(uri);
		System.out.println(post.getURI());

		try (CloseableHttpClient httpClient = new DefaultHttpClient();
				CloseableHttpResponse response = httpClient.execute(post);) {
			handleResponse(response);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

对于POST,还可以这样:
	public void simpleParamPost() throws UnsupportedEncodingException {
		HttpPost post = new HttpPost("http://www.baidu.com");

		List<NameValuePair> params = new ArrayList<>();
		params.add(new BasicNameValuePair("name", "zhangsan"));
		params.add(new BasicNameValuePair("password", "1234"));
		post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

		try (CloseableHttpClient httpClient = new DefaultHttpClient();
				CloseableHttpResponse response = httpClient.execute(post);) {
			handleResponse(response);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

2.3 对于Header的处理

对于请求头的处理,诸如设置字段值:
	public void addHeadersGet() throws UnsupportedEncodingException {
		HttpGet get = new HttpGet("http://www.baidu.com");
		get.setHeader("User-Agent",
				"Ahopedog/5.0 (Linux NT 5.1; rv:5.0) Gecko/20100101 FireDog/5.0");
		get.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");

		List<NameValuePair> params = new ArrayList<>();
		params.add(new BasicNameValuePair("name", "zhangsan"));
		params.add(new BasicNameValuePair("password", "1234"));

		try (CloseableHttpClient httpClient = new DefaultHttpClient();
				CloseableHttpResponse response = httpClient.execute(get);) {
			handleResponse(response);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void addHeadersPost() throws UnsupportedEncodingException {
		HttpPost post = new HttpPost("http://www.baidu.com");
		post.setHeader("User-Agent",
				"Ahopedog/5.0 (Linux NT 5.1; rv:5.0) Gecko/20100101 FireDog/5.0");
		post.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");

		List<NameValuePair> params = new ArrayList<>();
		params.add(new BasicNameValuePair("name", "zhangsan"));
		params.add(new BasicNameValuePair("password", "1234"));
		post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

		try (CloseableHttpClient httpClient = new DefaultHttpClient();
				CloseableHttpResponse response = httpClient.execute(post);) {
			handleResponse(response);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

处理响应头的话基本原理差不多,代码是这样:
	public void handlePostResponseHeader() throws UnsupportedEncodingException {
		HttpPost post = new HttpPost("http://www.baidu.com");

		try (CloseableHttpClient httpClient = new DefaultHttpClient();
				CloseableHttpResponse response = httpClient.execute(post);) {
			Header[] headers = response.getAllHeaders();
			for (Header h : headers) {
				System.out.println(h.getName() + " : " + h.getValue());
			}
			Header serverHeader = response.getFirstHeader("server");
			System.out.println(serverHeader.getName() + " : "
					+ serverHeader.getValue());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}


通过以上代码可以看出,HTTP component能够帮我们省去复杂的HTTP协议的建立连接、处理等操作,框架封装了细节。


3. Fluent方式

以上工作做完了之后,HTTP component仍然觉得不满足,他们认为还可以提供给我们更简洁编写自己代码的方案,于是Fluent来了:

3.1 最简单的调用

GET和POST都差不多:
	public void simpleGet() {
		Request request = Request.Get("http://www.baidu.com");

		handleContent(request);
	}

	public void simplePost() {
		Request request = Request.Post("http://www.baidu.com");

		handleContent(request);
	}

处理代码:
	private void handleContent(Request request) {
		Response response;
		try {
			response = request.execute();
			System.out.println(response.returnContent());
		} catch (ClientProtocolException e1) {
			e1.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

3.2 增加参数

对于GET很简单,这里看看POST:
	public void simpleURIPost() {
		URI uri = URI.create("http://www.sina.com");
		Request request = Request.Post(uri).bodyForm(
				Form.form().add("username", "zhangsan").add("pasword", "pwd")
						.build());

		handleContent(request);
	}

3.3 对于头和整个内容的处理

对于请求头、响应头和整个响应的处理,参见下面的代码:
	public void simpleHeaderPost() {
		Request request = Request.Post("http://www.sina.com.cn");
		request.addHeader("User-Agent",
				"Ahopedog/5.0 (Linux NT 5.1; rv:5.0) Gecko/20100101 FireDog/5.0");
		request.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");

		handleResponse(request);
		handleEntity(request);
	}

	private void handleEntity(Request request) {
		try {
			HttpResponse response = request.execute().returnResponse();
			HttpEntity entity = response.getEntity();
			Header header = entity.getContentType();
			System.out.println(header.getName() + ":    " + header.getValue());
		} catch (ClientProtocolException e1) {
			e1.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void handleResponse(Request request) {
		try {
			HttpResponse response = request.execute().returnResponse();
			Header[] headers = response.getAllHeaders();
			for (Header header : headers) {
				System.out.println("Header Name: " + header.getName()
						+ "; Header Value: " + header.getValue());
			}
		} catch (ClientProtocolException e1) {
			e1.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}





使用Java的HTTP协议库 HttpComponents HTTP协议是在互联网上进行通信的一种规范,它定义了客户端和服务器之间的请求和响应的格式。在Java中,我们可以使用HttpComponents库来处理HTTP协议相关的操作,包括发送HTTP请求和接收HTTP响应。您可以使用HttpComponents库发送HTTP请求并接收HTTP响应,从而实现与服务器之间的数据交互。除了发送GET请求,HttpComponents库还支持发送其他类型的HTTP请求,如POST、PUT、DELETE等。在获取到响应后,我们可以通过获取到响应后,我们可以通过。 阅读详情

相关推荐

深入理解Apache HttpComponents Client

本文还有配套的精品资源,点击获取 简介:Apache HttpComponents Client是Apache软件基金会的开源项目,它提供了一个强大的HTTP客户端库,支持包括HTTP基本方法、连接管理、身份验证、Cookie管理等。本教程将详细介绍如何使用4.4.1版本的HttpComponents Client,包括连接管理、多协议支持、请求响应处理、内置身份验证机制、...

weixin_35516624的博客 1770

Apache HttpComponents 简单使用

官网 https://hc.apache.org/ 参考 https://www.cnblogs.com/lrzy/articles/15667814.html 简介 Apache Commons HttpClient(或被称为 Apache HttpClient 3.x)、Apache HttpComponents Client(或被称为 Apache HttpClient 4.x) HttpComponents 项目就是专门设计来简化 HTTP 客户端与服务器进行各种通讯编程。 现在的 HttpComp

不懂一休 2万+

企业级 Agent 在 K8s 上的运行模型

Kubernetes├── Agent Orchestrator(控制面)├── Agent Runtime Pods(执行面)├── Graph DSL(流程层)├── Tool Services(能力层)K8s(调度)+ Graph(流程)+ Agent(决策)+ Tool(执行)+ Guard(治理)

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 1172

HttpComponents入门解析

  1 简介     超文本传输协议(http)是目前互联网上极其普遍的传输协议,它为构建功能丰富,绚丽多彩的网页提供了强大的支持。构建一个网站,通常无需直接操作http协议,目前流行的WEB框架已经透明的将这些底层功能封装的很好了,如常见的J2EE, .NET, php等框架或语言。 除了作为网站系统的底层支撑,http同样可以在其它的一些场景中使用,如游戏服务器和客户端的传输协议、web...

金永哲的博客 Now Loading... 550

用OpenCV+ROS实现焊接机器人智能纠偏:线激光视觉的算法调参全流程

本文详细介绍了基于OpenCV和ROS的焊接机器人智能纠偏系统全流程。通过线激光视觉系统实时感知焊缝,重点解析了抗干扰图像预处理、改进的Steger算法提取激光条纹中心线,以及从2D像素到机器人基坐标系的完整坐标变换。该系统为应对焊接飞溅、弧光等复杂工况,实现高精度实时路径纠偏提供了从算法优化到工程集成的完整解决方案。

vodka的博客 159

java结合Ai

Spring AI 是 AI 工程的应用框架。其目标是将Spring生态系统的设计原则(如可移植性和模块化设计)应用于AI领域,并促进使用POJO作为应用程序的构建块到AI领域。特征跨 AI 提供商的可移植 API 支持,适用于聊天、文本到图像和嵌入模型。支持同步 API 和流 API 选项。还支持下拉以访问特定于模型的功能。聊天模型亚马逊基岩人类学Cohere的命令AI21 Labs的侏罗纪-2Meta 的 LLama亚马逊的泰坦人类学克劳德Azure 开放式 AI。

qq_67832732的博客 2848

Maven Maven的概述

随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包也越来越多。项目中, 一个模块里面用到上百个jar包是非常正常的。

weixin_65637841的博客 492

bcftools学习笔记(一)

欢迎关注"生信修炼手册"!本篇主要介绍index, view, query, sort, reheader这五个命令。1. indexindex命令用于对VCF文件建立索...

庐州月光的博客 6010

HttpComponents和HttpClient基本用法

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

azhu12138的博客 3401

全桥LLC谐振变换器设计与双环控制策略详解

LLC谐振变换器作为高频开关电源的核心拓扑,通过谐振腔实现软开关特性,显著提升转换效率(可达96%以上)。其工作原理基于谐振电感、电容的协同作用,当开关频率接近谐振点时实现ZVS/ZCS。在工业电源、电动汽车充电等场景中,电压电流双环控制策略通过引入电流内环和竞争仲裁机制,有效改善动态响应(实测负载跳变时电压跌落减少60%)。数字控制实现时需注意ADC采样同步和PWM更新时序,而谐振参数测量与温升管理则是工程实践的关键。

weixin_29189987的博客 257

将点云坐标转换成世界坐标的demo

将点云坐标转换成世界坐标的demo

howard789的博客 2206

apache的HttpComponents项目的介绍和简单使用

1、HttpComponents项目的介绍 先介绍一下一个开源项目, 这个项目就是Apache开源组织中的HttpComponents,主要是提供对http服务器的访问功能,目前已经是一个单独的项目,可见http服务器的访问绝非易事。     在某些时候可能需要通过程序来访问这别人的网页程序,比如从别人的网页中“偷”一些数据。如果对方仅仅是一个很简单的页面,那我们的程序

Mr_Lee—胜利的博客 462

ResNet改进(7):添加 SK注意力机制

实现 SK 注意力机制。

2401_82355416的博客 732

Apache HttpComponents Core 开源项目指南及问题解决

Apache HttpComponents Core 开源项目指南及问题解决 Apache HttpComponents Core 是Apache软件基金会的一个重要项目,专注于提供高效、灵活的HTTP客户端和服务端通信组件。此项目以Java作为主要编程语言,广泛应用于构建需要进行HTTP通信的应用程序。 新手使用注意事项及解决方案 1. 环境配置问题 问题描述: 新手在搭建开发环境时可能会因为J...

gitblog_00881的博客 417

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

模型实战(31)之 yolo26 实现对手部关键点数据集 的训练与关键点检测

yohnyang的博客 209

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HttpComponents-Client 4.4 二进制包下载

HttpComponents-Client 4.4 二进制包下载 去发现同类优质开源项目:https://gitcode.com/ 欢迎使用HttpComponents-Client 4.4的二进制资源文件下载。此压缩文件包含了HttpComponents-Client组件的JAVA实现,它是一个开放源代码的项目,旨在为JAVA应用程序提供一个功能强大、灵活且高效的HTTP客户端。 关于HttpC...

gitblog_06750的博客 1116

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

HttpComponents-Client 4.4 二进制包下载:强大的JAVA HTTP客户端

HttpComponents-Client 4.4 二进制包下载:强大的JAVA HTTP客户端 去发现同类优质开源项目:https://gitcode.com/ HttpComponents-Client 4.4 二进制包下载,为JAVA应用程序提供功能强大、灵活且高效的HTTP客户端。 项目介绍 HttpComponents-Client 是Apache软件基金会下的Jakarta Commo...

gitblog_06798的博客 869

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Apache HttpComponents HttpClient

是 Apache 提供的一个开源库,用于在 Java 应用程序中执行 HTTP 请求和响应处理。它支持同步和异步模式,提供了对常见 HTTP 操作的简单而强大的封装。类封装的请求体或响应体可以承载任何格式的数据,传递给服务器或从服务器接收。实体可以理解为 HTTP 请求或响应的“数据负载”。

2301_79140115的博客 889

Apache HttpComponents 项目教程

Apache HttpComponents 项目教程 项目介绍 Apache HttpComponents 是一个开源项目,旨在提供构建HTTP服务的组件。该项目由Apache软件基金会维护,自2005年以来一直在开发和改进。HttpComponents 包括多个子项目,如HttpClient和HttpCore,它们分别提供了客户端和服务器端的HTTP通信功能。 项目快速启动 环境准备 在开始之前...

gitblog_00542的博客 833

HttpComponents 发送post get 请求

1.场景描述   使用Apache开源组织中的HttpComponents,完成对http服务器的访问功能,消息体xml报文。 2.HttpComponents项目的介绍   HttpComponents项目就是专门设计来简化HTTP客户端与服务器进行各种通讯编程。通过它可以让原来很头疼的事情现在轻松的解决,例如你不再管是HTTP或者HTTPS的通讯方式,告诉它你想使用HTTPS方...

dianluochai5713的博客 284

HttpComponents

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34319640的博客 95

探索JIRA的Java世界:jira-client开源项目推荐

探索JIRA的Java世界:jira-client开源项目推荐 项目介绍 在现代软件开发中,JIRA作为项目管理和问题跟踪工具,被广泛应用于各种开发团队中。然而,与JIRA的交互通常需要通过复杂的API调用,这对于开发者来说可能是一个挑战。为了简化这一过程,jira-client应运而生。jira-client是一个轻量级的JIRA REST客户端库,专为Java开发者设计,旨在提供简单、直观的J...

gitblog_00474的博客 993

Java开源的爬虫工具--对比

本文介绍Java开源的爬虫工具(框架)。

IT利刃出鞘的博客 1097

Apache HttpComponents Client详解

Apache HttpComponents Client(也称为HttpClient)是一个开源的Java库,用于发送HTTP请求并处理HTTP响应。它提供了一组易于使用的API,用于构建和执行HTTP请求,并处理请求和响应的各个方面,如URL处理、请求头、请求体、响应状态、响应内容等。这些只是Apache HttpComponents Client库的一些基本用法示例,它还提供了许多其他功能和配置选项,如连接池管理、代理设置、超时设置、SSL/TLS配置等,以满足更复杂的HTTP请求需求。

wei7a7a7a的博客 533

推荐开源项目:Apache HttpComponents Core

推荐开源项目:Apache HttpComponents Core 项目介绍 欢迎关注Apache HttpComponents项目中的HttpCore组件。这是一个专门设计用于处理HTTP协议的核心库,提供了高效且可扩展的HTTP客户端和服务器端实现。该项目旨在简化网络通信并提供对Java平台的强大支持。 项目技术分析 HttpCore依赖于Java 1.6及以上版本的运行时环境。它针对HTTP...

gitblog_00059的博客 486
上一篇: Maven项目管理实战(六)--完成单元测试
下一篇: Java开源框架类库介绍(二)--FastJson
Soloman
博客等级 码龄25年 171粉丝 159原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值