java中如何使用HttpClient调用接口

目录
  • java使用HttpClient调用接口
    • HttpClient 提供的主要的功能
    • 直接言归正传了!!!!上代码
  • 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提供的数据。

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

(0)

相关推荐

  • Java服务调用RestTemplate与HttpClient的使用详解

    目录 概述 RestTemplate 概述及依赖 配置类 使用 GET请求 POST请求 上传文件 HttpClient 概述 使用 概述 常见的远程调用方式有以下2种: RPC: Remote Produce Call远程过程调用,类似的还有RMI(remote method invoke).自定义数据格式,基于原生TCP通信,速度快,效率高.早期的webservice,现在热门的dubbo,都是RPC的典型代表. Http: http其实是一种网络传输协议,基于TCP,规定了数据传输的格式.

  • Java利用httpclient通过get、post方式调用https接口的方法

    通过httpclient的get post方式调用http很常见.一般都是 HttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(http://127.0.0.1/login); 但是如果要调用https这个方式就不行了.就要修改DefaultHttpClient <dependency> <groupId>org.apache.httpcomponents</groupId>

  • Java使用HttpClient详细示例

    目录 准备环节 第一步:在pom.xml中引入HttpClient的依赖 第二步:引入fastjson依赖 详细使用示例 GET无参: GET有参(方式一:直接拼接URL): GET有参(方式二:使用URI获得HttpGet): POST无参: POST有参(普通参数): POST有参(对象参数): POST有参(普通参数 + 对象参数): 对评论区关注度较高的问题进行相关补充: 解决响应乱码问题(示例): 进行HTTPS请求并进行(或不进行)证书校验(示例): 相关方法详情(非完美封装): a

  • Java原生HttpClient的使用详解

    目录 1.信任证书管理类 2.HttpClient类 3.发送请求工具类 4.测试 提到Java发送HTTP请求,大家首先想到的是用apache的HttpClient,或者squareup的OkHttp.而在Java11之前,原生Java对此的支持还是比较差的,虽然可以HttpURLConnection.URLConnection.Socket等自带的类发送请求,但是操作比较复杂.直到Java11发布,Java本身也自带了HttpClient.自2020年初,我就在开发中广泛使用了这一新特性,感

  • JAVA利用HttpClient进行HTTPS接口调用的方法

    本文介绍了JAVA利用HttpClient进行HTTPS接口调用的方法,分享给大家,具体如下: 1.为了避免需要证书,所以用一个类继承DefaultHttpClient类,忽略校验过程. import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManage

  • java中如何使用HttpClient调用接口

    目录 java使用HttpClient调用接口 HttpClient 提供的主要的功能 直接言归正传了!!!!上代码 java的HttpClient调用远程接口 使用方法 实例 java使用HttpClient调用接口 HttpClient 提供的主要的功能 (1)实现了所有 HTTP 的方法(GET,POST,PUT,DELETE 等) (2)支持自动转向 (3)支持 HTTPS 协议 (4)支持代理服务器等 直接言归正传了!!!!上代码 public static String sendPu

  • 使用HttpClient调用接口的实例讲解

    一,编写返回对象 public class HttpResult { // 响应的状态码 private int code; // 响应的响应体 private String body; get/set- } 二,封装HttpClient package cn.xxxxxx.httpclient; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.Name

  • Java中的Comparable和Comparator接口

    目录 一. Comparable接口 1. Comparable简介 2. 为什么要实现Comparable接口 3. Comparable的实际应用 二. Comparator接口 1. Comparator简介 2. Comparator接口的实际运用 三. Comparable和Comparator的比较 一. Comparable接口 1. Comparable简介 Comparable是排序接口. 若一个类实现了Comparable接口,就意味着该类支持排序. 实现了Comparabl

  • 在java中main函数如何调用外部非static方法

    使用外部方法时(不管是static还是非static),都要先new一个对象,才能使用该对象的方法. 举例如下: 测试函数(这是错误的): public class Test { public static void main(String[] args) { Employee employee = null; employee.setName("旺旺"); //有警告,况且这里也执行不下去 employee.setEmail("ww@qq.com"); emplo

  • Java中为什么this可以调用当前实例

    目录 1. 前言 2. 栈帧 3. 分析 4. 总结 1. 前言 在刚开始学习Java的时候,大家肯定都接触过this关键字,尤其是在构造函数赋值的时候,如下示例: public class Person { private String name; private int age; public Person(String name, int age) { // 必须加this关键字,否则无法完成成员变量的赋值 this.name = name; this.age = age; } } 在构造

  • java中抽象类、抽象方法、接口与实现接口实例详解

    前言 对于java中的抽象类,抽象方法,接口,实现接口等具体的概念就不在这里详细的说明了,网上书本都有很多解释,主要是我懒,下面通过一个例子来说明其中的精髓要点,能不能练成绝世武功,踏上封王之路,就看自己的的啦(不要误会,我指的只是我自己啦啦) 用接口实现一个简单的计算器 1.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCo

  • 简析Java中的util.concurrent.Future接口

    在一个单线程应用中,当你调用一个方法只有计算结束才会返回结果( IOUtils.toString()  comes from Apache Commons IO ): public String downloadContents(URL url) throws IOException { try(InputStream input = url.openStream()) { return IOUtils.toString(input, StandardCharsets.UTF_8); } } /

  • [J2SE]Java中3DES加密解密调用示例

    jce.jar security/US_export_policy.jar security/local_policy.jar ext/sunjce_provider.jar Java运行时会自动加载这些包,因此对于带main函数的应用程序不需要设置到CLASSPATH环境变量中.对于WEB应用,不需要把这些包加到WEB-INF/lib目录下. 以下是java中调用sun公司提供的3DES加密解密算法的样本代码: 复制代码 代码如下: /*字符串 DESede(3DES) 加密*/ import

  • 基于JAVA中使用Axis发布/调用Webservice的方法详解

    本示例和参考文章的差别在于: 1)deploy.wsdd定义的更详细(对于server端定义了接口:ICalculate): 复制代码 代码如下: <deployment xmlns="http://xml.apache.org/axis/wsdd/"    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">    <service name="Calculate&qu

  • Java中的clone()和Cloneable接口实例

    目录 clone()和Cloneable接口 Cloneable和clone()的总结 1.Cloneable 的用途 2.克隆的分类 3.克隆的举例 4.浅克隆的举例 5.深克隆的举例 clone()和Cloneable接口 clone顾名思义就是克隆,即,复制一个相等的对象,但是不同的引用地址. 我们知道拿到一个对象的地址,只要提供相应的方法就可以修改这个对象,但是如果我们想要得到这个对象去修改它,又想保留这个对象原来的属性,这是就可以使用clone(),它会复制一个内容相同的对象而具有不同

随机推荐