java中如何使用HttpClient调用接口

 更新时间:2022年10月26日 17:02:33   作者:蚕豆是个程序猿  
这篇文章主要介绍了java中如何使用HttpClient调用接口,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

java使用HttpClient调用接口

HttpClient 提供的主要的功能

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

(2)支持自动转向

(3)支持 HTTPS 协议

(4)支持代理服务器等

直接言归正传了!!!!上代码

 public static String sendPutForm(String url,  Map<String,String> map, String encoding) throws ParseException, IOException {
        String body = "";
        // 打印了一下我推送的json数据
        log.info("我推送的json数据:" + map);
        log.info("我推送的url:" + url);
        CloseableHttpResponse response = null;
        ///获得Http客户端
        CloseableHttpClient client = HttpClients.createDefault();
        List<NameValuePair> parameters = new ArrayList<NameValuePair>();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
            parameters.add(new BasicNameValuePair(entry.getKey(),entry.getValue()));
        }
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters);
		// 配置信息
		// 设置连接超时时间(单位毫秒)
		// 设置请求超时时间(单位毫秒)
		// socket读写超时时间(单位毫秒)
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(50000).setConnectionRequestTimeout(50000)
                .setSocketTimeout(50000).build();
        // 向指定资源位置上传内容// 创建Post请求
        HttpPost httpPost = new HttpPost(url);
        httpPost.setConfig(requestConfig);
        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
        httpPost.setEntity(formEntity);
        try {
            response = client.execute(httpPost);
            // 通过response中的getEntity()方法获取返回值
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                body = EntityUtils.toString(entity, encoding);
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            httpPost.abort();
            if (response != null) {
                EntityUtils.consumeQuietly(response.getEntity());
            }
        }
        log.info("body:" + body);
        return body;
    }

代码其实就是这么多,还有好多形式。大家可以参考写一下。

java的HttpClient调用远程接口

httpClient比jdk自带的URLConection更加易用和方便,这里介绍一下使用httpClient来调用远程接口。

首先导入相关的依赖包:

<!-- httpClient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>

使用方法

1,创建HttpClient对象;

2,指定请求URL,并创建请求对象,如果是get请求则创建HttpGet对象,post则创建HttpPost对象;

3,如果请求带有参数,对于get请求可直接在URL中加上参数请求,或者使用setParam(HetpParams params)方法设置参数,对于HttpPost请求,可使用setParam(HetpParams params)方法或者调用setEntity(HttpEntity entity)方法设置参数;

4,调用httpClient的execute(HttpUriRequest request)执行请求,返回结果是一个response对象;

5,通过response的getHeaders(String name)或getAllHeaders()可获得请求头部信息,getEntity()方法获取HttpEntity对象,该对象包装了服务器的响应内容。

实例

我使用了property文件来保存不同API对应的链接,也可以除去properties文件的读取代码,直接将变量 API换成所需URL

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Map;
import java.util.Properties;
 
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
 
public class APIUtil {
 
	/**
	 * 返回API调用结果
	 * @param APIName 接口在api.properties中的名称
	 * @param params 访问api所需的参数及参数值
	 * @return 此处返回的是JSON格式的数据
	 */
	public static String API(String APIName, Map<String, Object> params) {
		 String content = "";
		 //请求结果  
                CloseableHttpResponse response = null;  
		//实例化httpclient  
                CloseableHttpClient httpclient = HttpClients.createDefault();  
       
            try {
        	 //读取配置文件的URL
                Properties properties = new Properties();
                URL fileURL = APIUtil.class.getClassLoader().getResource("api.properties");
		properties.load(new FileInputStream(new File(fileURL.getFile())));
		String API = properties.getProperty(APIName);
	        //构造url请求
	        StringBuilder url = new StringBuilder(API);
	        if(params!=null && params.size()>0) {
	        	url.append("?");
	        	for(Map.Entry<String, Object> entry : params.entrySet()) {
	            	url.append(entry.getKey()+"="+entry.getValue()+"&");
	            }
	        	url.substring(0, url.length()-1);
	        }
	        //实例化get方法  
	        HttpGet httpget = new HttpGet(url.toString()); 
	        //执行get请求
		response = httpclient.execute(httpget);
		if(response.getStatusLine().getStatusCode()==200) {
			content = EntityUtils.toString(response.getEntity(),"utf-8");
		}
	} catch (IOException e) {
		e.printStackTrace();
	}
        return content;
    }	
}

执行完毕后返回API提供的数据。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Bean的生命周期详细介绍

    Spring Bean的生命周期详细介绍

    这篇文章主要介绍了Spring Bean的生命周期的相关资料,需要的朋友可以参考下
    2016-09-09
  • 基于RabbitMQ几种Exchange 模式详解

    基于RabbitMQ几种Exchange 模式详解

    下面小编就为大家带来一篇基于RabbitMQ几种Exchange 模式详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • SpringMVC和Spring的配置文件扫描包详解

    SpringMVC和Spring的配置文件扫描包详解

    这篇文章主要介绍了SpringMVC和Spring的配置文件扫描包,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • Spring-cloud 注册服务提供者搭建方法

    Spring-cloud 注册服务提供者搭建方法

    本篇文章主要介绍了Spring-cloud 注册服务提供者搭建方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 引入SpringCloud-gateway报错的解决方案

    引入SpringCloud-gateway报错的解决方案

    这篇文章主要介绍了引入SpringCloud-gateway报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java枚举抽象方法实例解析

    Java枚举抽象方法实例解析

    这篇文章主要介绍了Java枚举抽象方法实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • WxJava微信公众号开发入门实战

    WxJava微信公众号开发入门实战

    本文主要介绍了WxJava微信公众号开发入门实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • SpringBoot结合mybatis-plus实现分页的项目实践

    SpringBoot结合mybatis-plus实现分页的项目实践

    本文主要介绍了SpringBoot结合mybatis-plus实现分页的项目实践,主要基于MyBatis-Plus 自带的分页插件 PaginationInterceptor,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • springboot返回html和jsp的方法示例

    springboot返回html和jsp的方法示例

    这篇文章主要介绍了springboot返回html和jsp的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 超详细介绍idea中java程序打jar包的两种方式

    超详细介绍idea中java程序打jar包的两种方式

    这篇文章主要介绍了超详细介绍idea中java程序打jar包的两种方式一种是可直接执行的runnable jar文件,另一种是包含多个主类,运行时需要指定主类全类名的jar包,感兴趣的可以了解一下
    2020-07-07

最新评论