文档章节

HttpClient的简单使用

登琼
 登琼
发布于 2016/07/27 13:45
字数 457
阅读 75
收藏 4

1.maven pom.xml 

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.5.2</version>
		</dependency>
		<dependency>
			<!-- json -->
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.4</version>
			<!--指定jdk版本 -->
			<classifier>jdk15</classifier>
		</dependency>

2.java 

package http;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.Consts;
import org.apache.http.HttpEntity;
import org.apache.http.client.HttpResponseException;
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.StringEntity;
import org.apache.http.impl.client.AbstractResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import net.sf.json.JSONObject;

/**
 * 只做示例演示,项目中请共用CloseableHttpClient效率高。
 * 
 * @author 登琼 2016-07-27 11:19
 *
 */
public class HttpClientTest {

	static String HOST = "111.111.111.11:8111/app";
	BasicUtf8ResponseHandler basicUtf8ResponseHandler = new BasicUtf8ResponseHandler();
	static JSONObject TOKEN = null;

	public static void main(String[] args) {

		HttpClientTest httpClientTest = new HttpClientTest();
		// 获取token
		TOKEN = httpClientTest.getToken();
		System.out.println(TOKEN);
		JSONObject keyword = httpClientTest.getKeyword(TOKEN.getString("access_token"));
		System.out.println(keyword);
	}

	/**
	 * 示例get请求
	 * 
	 * @return
	 */
	private JSONObject getToken() {
		URI uri = null;
		try {
			uri = new URIBuilder().setScheme("http").setHost(HOST).setPath("/oauth/token")
					.setParameter("client_id", "mysupplycompany").setParameter("client_secret", "mycompanykey")
					.setParameter("grant_type", "password").setParameter("scope", "app")
					.setParameter("username", "ceshiwx").setParameter("password", "ceshiwx1").build();
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}

		CloseableHttpClient closeableHttpClient = HttpClients.createDefault();
		HttpGet httpGet = new HttpGet(uri);
		httpGet.setHeader("Content-Type", "application/json");

		String handleResponse = null;
		try {
			handleResponse = basicUtf8ResponseHandler.handleResponse(closeableHttpClient.execute(httpGet));
		} catch (HttpResponseException e) {
			// 处理网络异常信息
			System.err.println(e.getStatusCode());
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				closeableHttpClient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return JSONObject.fromObject(handleResponse);
	}

	/**
	 * 示例post请求,请求参数word
	 * 
	 * @param access_token
	 * @return
	 */
	private JSONObject getKeyword(String access_token) {
		URI uri = null;
		try {
			uri = new URIBuilder().setScheme("http").setHost(HOST).setPath("/mobilese/spec/keyword")
					.setParameter("access_token", access_token).build();
		} catch (URISyntaxException e) {
			e.printStackTrace();
		}

		CloseableHttpClient closeableHttpClient = HttpClients.createDefault();

		HttpPost httpPost = new HttpPost(uri);
		httpPost.setHeader("Content-Type", "application/json");
		StringEntity entity = new StringEntity("{\"word\":\"雨\"}", Consts.UTF_8);
		httpPost.setEntity(entity);

		String handleResponse = null;
		try {
			handleResponse = basicUtf8ResponseHandler.handleResponse(closeableHttpClient.execute(httpPost));
		} catch (HttpResponseException e) {
			// 处理网络异常信息
			System.err.println(e.getStatusCode());
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				closeableHttpClient.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return JSONObject.fromObject(handleResponse);
	}

	/**
	 * 参考 {@link org.apache.http.impl.client.BasicResponseHandler} <br>
	 * 备注: <br>
	 * 为方便暂时使用内部类,项目中请自行优化
	 * 
	 * @author 登琼 2016-07-28 11:25
	 *
	 */
	public class BasicUtf8ResponseHandler extends AbstractResponseHandler<String> {

		@Override
		public String handleEntity(HttpEntity entity) throws IOException {

			return EntityUtils.toString(entity, Consts.UTF_8);
		}

	}
}

3.结果

{"access_token":"24f753fa-4733-400b-8a0f-a9c84512fe16","token_type":"bearer","refresh_token":"00fbf63c-fc9b-4e27-91a8-86901191dd91","expires_in":72115,"scope":"app"}
{"repCode":1,"repMsg":"success","keywordList":[{"keyword":"雨刮片"},{"keyword":"雨刮臂"},{"keyword":"雨刷精"},{"keyword":"晴雨挡"},{"keyword":"雨刮横梁"},{"keyword":"雨刮电机"},{"keyword":"雨刮臂盖"},{"keyword":"雨刮开关"},{"keyword":"雨刮总成"},{"keyword":"雨刮支架"}],"total":35}

 

 

© 著作权归作者所有

登琼
粉丝 3
博文 47
码字总数 8538
作品 0
广州
程序员
私信 提问
Android 浅谈HttpClient工具类

在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient来方便我们使用各种Http服务。你可以把HttpClient想象成一个浏览器,通过它的...

Jonson
2013/07/25
714
3
.NET Core 2.1中的HttpClientFactory最佳实践

ASP.NET Core 2.1中出现一个新的HttpClientFactory功能, 它有助于解决开发人员在使用HttpClient实例从其应用程序发出外部Web请求时可能遇到的一些常见问题。 介绍 在.NETCore平台的2.1新增了...

dotNET跨平台
2018/08/16
0
0
httpclient4.4 出现NoHttpResponseException的异常解决

httpclient4.4简单初始化httpclient的方式: 使用连接池初始化httpclient的方式: 但在测试过程中发现,有时候出现如下的异常,但重试一次就没有问题: 网上查了相关的报错信息,找到官网上的...

一路向北的兔斯基
2015/07/30
23.2K
2
android编写访问http的代码

android使用apache httpclient项目实现手机作为http客户端的调用。android使用的是最新的httpclient 4.0版本,网上很多国内的文档是3.x的,调用方式不一样。 httpclient有一个官方教程,见:...

xiahuawuyu
2012/08/06
299
0
.NetCore 2.1中的HttpClientFactory最佳实践

.NET Core 2.1中的HttpClientFactory最佳实践 ASP.NET Core 2.1中出现一个新的HttpClientFactory功能, 它有助于解决开发人员在使用HttpClient实例从其应用程序发出外部Web请求时可能遇到的一...

Chaunce
2018/08/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

SDKMAN推荐一个好

是在大多数基于Unix的系统上管理多个软件开发工具包的并行版本的工具。它提供了一个方便的命令行界面(CLI)和API来安装,切换,删除和列出sdk相关信息。以下是一些特性: By Developers, fo...

hotsmile
34分钟前
8
0
什么是 HDFS

是什么? HDFS 是基于 Java 的分布式文件系统,允许您在 Hadoop 集群中的多个节点上存储大量数据。 起源: 单机容量往往无法存储大量数据,需要跨机器存储。统一管理分布在集群上的文件系统称...

Garphy
37分钟前
4
0
一起来学Java8(四)——复合Lambda

在一起来学Java8(二)——Lambda表达式中我们学习了Lambda表达式的基本用法,现在来了解下复合Lambda。 Lambda表达式的的书写离不开函数式接口,复合Lambda的意思是在使用Lambda表达式实现函...

猿敲月下码
今天
10
0
debian10使用putty配置交换机console口

前言:Linux的推广普及,需要配合解决实际应用方能有成效! 最近强迫自己用linux进行实际工作,过程很痛苦,还好通过网络一一解决,感谢各位无私网友博客的帮助! 系统:debian10 桌面:xfc...

W_Lu
今天
12
0
aelf Enterprise 0.8.0 beta有奖公测,“Bug奖金计划”重磅开启

2019年9月30日,aelf Enterprise 0.8.0 beta版正式发布。aelf Enterprise 0.8.0 beta是一个完备的区块链系统, 包含完备的区块链系统、开发套件、开发文档、以及配套的基础应用和基础服务。 ...

AELF开发者社区
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部