我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java远程调用接口、URL的方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java远程调用接口、URL的方式

一:httpUrlConnection

1.获取HttpURLConnection连接对象

       public static HttpURLConnection getHttpURLConnection(String url){        try {            //建立连接            URL httpUrl = new URL(url);            HttpURLConnection urlConnection =(HttpURLConnection)httpUrl.openConnection();            //向文件所在服务器发送标识信息,模拟浏览器            urlConnection.setRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36");            return urlConnection;        } catch (IOException e) {            e.printStackTrace();            return null;        }    }

2.远程调用代码

    public void accessLoginUrl(){        //远程调用接口的url        String loginUrl = "http://localhost:8989/login/doLogin";        OutputStream outputStream = null;        InputStream inputStream = null;        ByteArrayOutputStream byteArrayOutputStream = null;        try {            //获取压测接口的userTicket            URL url = new URL(loginUrl);            HttpURLConnection connection = (HttpURLConnection) url.openConnection();            //登录是post请求            connection.setRequestMethod("POST");            //post请求需要设置接口返回的数据,所以设置为true            connection.setDoOutput(true);            //参数userId和密码            String param = "mobile=" + 13100000000000L + "&password=" + "123456";            //获取登录接口返回的流文件            outputStream = connection.getOutputStream();            outputStream.write(param.getBytes(StandardCharsets.UTF_8));            outputStream.flush();            inputStream = connection.getInputStream();            byteArrayOutputStream = new ByteArrayOutputStream();            byte[] buffer = new byte[1024];            int len = 0;            while ((len = inputStream.read(buffer)) >= 0){                byteArrayOutputStream.write(buffer, 0, len);            }            //获取响应结果            String response = byteArrayOutputStream.toString();            ObjectMapper objectMapper = new ObjectMapper();            RespBean respBean = objectMapper.readValue(response, RespBean.class);            String userTicket = (String) respBean.getObject();            System.out.println("远程调用接口的返回值"+userTicket);            //userTicket就是远程接口返回的值        } catch (IOException e) {            e.printStackTrace();        } finally {            if(byteArrayOutputStream != null){                try {                    byteArrayOutputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if(outputStream != null){                try {                    outputStream.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }    }

二:RestTemplate

2.1 什么是RestTemplate

  • spring 框架提供的 RestTemplate 类可用于在应用中调用 rest 服务,它简化了与 http 服务的通信方式,统一了 RESTful 的标准,封装了 http 链接, 我们只需要传入 url 及返回值类型即可。相较于之前常用的 HttpClient,RestTemplate 是一种更优雅的调用 RESTful 服务的方式。

  • 在 Spring 应用程序中访问第三方 REST 服务与使用 Spring RestTemplate 类有关。RestTemplate 类的设计原则与许多其他 Spring 模板类(例如 JdbcTemplate、JmsTemplate)相同,为执行复杂任务提供了一种具有默认行为的简化方法。

  • RestTemplate 默认依赖 JDK 提供 http 连接的能力(HttpURLConnection),如果有需要的话也可以通过 setRequestFactory 方法替换为例如 Apache HttpComponents、Netty 或 OkHttp 等其它 HTTP library。

  • 考虑到 RestTemplate 类是为调用 REST 服务而设计的,因此它的主要方法与 REST 的基础紧密相连就不足为奇了,后者是 HTTP 协议的方法:HEAD、GET、POST、PUT、DELETE 和 OPTIONS。例如,RestTemplate 类具有 headForHeaders()、getForObject()、postForObject()、put()和 delete()等方法。

2.2 配置RestTemplate

@Configurationpublic class RestTemplateConfig {    @Bean    public RestTemplate restTemplate(){        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();        //解决401报错时,报java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode        requestFactory.setOutputStreaming(false);        RestTemplate restTemplate = new RestTemplate(requestFactory);        restTemplate.setErrorHandler(new RtErrorHandler());        return restTemplate;    }        @Bean    public ClientHttpRequestFactory simpleClientHttpRequestFactory() {        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();        factory.setReadTimeout(5000);        factory.setConnectTimeout(15000);        return factory;    }

2.2 RestTemplate 添加请求头headers和请求体body

        HttpHeaders header = new HttpHeaders();        header.add("X-Consumer-Third-User-Id", "X-Consumer-Third-User-Id");        header.add("X-Consumer-Third-User-Name", "X-Consumer-Third-User-Name");        header.set("Authorization", "authorization");        HttpEntity<AssetProcessVo> httpEntity = new HttpEntity<>(assetProcessVo, header);
  • header 为需要设置的请求头
  • AssetProcessVo为需要远程调用接口传递的参数

2.3 示例代码

    public void accessLoginUrl(){        HttpHeaders header = new HttpHeaders();        header.add("X-Consumer-Third-User-Id", "X-Consumer-Third-User-Id");        header.add("X-Consumer-Third-User-Name", "X-Consumer-Third-User-Name");        header.set("Authorization", "authorization");        HttpEntity<AssetProcessVo> httpEntity = new HttpEntity<>(assetProcessVo, header);        ResponseEntity<ByteArrayOutputStream> exchange;        try {            //保存案件名称后,启动工作流            exchange = restTemplate.exchange(url, HttpMethod.POST, httpEntity, ByteArrayOutputStream.class);            if (exchange.getStatusCodeValue() == 200) {                String response = byteArrayOutputStream.toString();                ObjectMapper objectMapper = new ObjectMapper();                RespBean respBean = objectMapper.readValue(response, RespBean.class);            }        } catch (RestClientException e) {            e.printStackTrace();        }

三:HttpClient

3.1 导入依赖

    org.apache.httpcomponents    httpclient    4.5.3

3.2 使用方法

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对象,该对象包装了服务器的响应内容。

3.3 代码实现

package com.cnzz.demo.remote.rpc; import com.alibaba.fastjson.JSONObject;import org.apache.commons.httpclient.*;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod;import org.apache.commons.httpclient.params.HttpMethodParams; import java.io.IOException;  public class HttpClientUtil {         public static String doGet(String url, String charset) {        //1.生成HttpClient对象并设置参数        HttpClient httpClient = new HttpClient();        //设置Http连接超时为5秒        httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);        //2.生成GetMethod对象并设置参数        GetMethod getMethod = new GetMethod(url);        //设置get请求超时为5秒        getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 5000);        //设置请求重试处理,用的是默认的重试处理:请求三次        getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());        String response = "";        //3.执行HTTP GET 请求        try {            int statusCode = httpClient.executeMethod(getMethod);            //4.判断访问的状态码            if (statusCode != HttpStatus.SC_OK) {                System.err.println("请求出错:" + getMethod.getStatusLine());            }            //5.处理HTTP响应内容            //HTTP响应头部信息,这里简单打印            Header[] headers = getMethod.getResponseHeaders();            for(Header h : headers) {                System.out.println(h.getName() + "---------------" + h.getValue());            }            //读取HTTP响应内容,这里简单打印网页内容            //读取为字节数组            byte[] responseBody = getMethod.getResponseBody();            response = new String(responseBody, charset);            System.out.println("-----------response:" + response);            //读取为InputStream,在网页内容数据量大时候推荐使用            //InputStream response = getMethod.getResponseBodyAsStream();        } catch (HttpException e) {            //发生致命的异常,可能是协议不对或者返回的内容有问题            System.out.println("请检查输入的URL!");            e.printStackTrace();        } catch (IOException e) {            //发生网络异常            System.out.println("发生网络异常!");        } finally {            //6.释放连接            getMethod.releaseConnection();        }        return response;    }         public static String doPost(String url, JSONObject json){        HttpClient httpClient = new HttpClient();        PostMethod postMethod = new PostMethod(url);         postMethod.addRequestHeader("accept", "*/*");        postMethod.addRequestHeader("connection", "Keep-Alive");        //设置json格式传送        postMethod.addRequestHeader("Content-Type", "application/json;charset=GBK");        //必须设置下面这个Header        postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");        //添加请求参数        postMethod.addParameter("commentId", json.getString("commentId"));         String res = "";        try {            int code = httpClient.executeMethod(postMethod);            if (code == 200){                res = postMethod.getResponseBodyAsString();                System.out.println(res);            }        } catch (IOException e) {            e.printStackTrace();        }        return res;    }     public static void main(String[] args) {        System.out.println(doGet("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=telPhone", "GBK"));        System.out.println("-----------分割线------------");        System.out.println("-----------分割线------------");        System.out.println("-----------分割线------------");         JSONObject jsonObject = new JSONObject();        jsonObject.put("commentId", "telPhone");        System.out.println(doPost("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=13026194071", jsonObject));    }}

来源地址:https://blog.csdn.net/suiyishiguang/article/details/131014617

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java远程调用接口、URL的方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

java远程调用接口的方式有哪些

Java远程调用接口的方式有以下几种:1. Java RMI(Remote Method Invocation): Java RMI是一种Java平台上的远程过程调用协议,它允许一个Java应用程序通过网络调用远程对象的方法。Java RM
2023-10-21

Java调用CXF WebService接口的两种方式实例

方式一:使用CXF提供的工具生成客户端代码。1. 在项目中添加CXF的依赖。2. 使用CXF提供的命令行工具生成客户端代码,命令如下:```wsdl2java -d -p ```其中,``为生成的代码存放的目录,``为生成的代码所在的包
2023-09-16

Java调用第三方http接口的方式总结(四种)

在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信、天气等) ①通过JDK网络类Java.net.HttpURLConn
2023-08-16

C#调用接口的方式有哪些

这篇“C#调用接口的方式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#调用接口的方式有哪些”文章吧。在用C#调用接
2023-07-02

Web Service接口的请求、调用方式

Web Service接口的请求方式主要有以下几种: 1、SOAP(Simple Object Access Protocol):是一种基于XML的消息协议,常用于Web Service接口之间的通信。SOAP消息可以使用HTTP、SMTP
2023-08-30

Python调用API接口的几种方式

Python调用API接口的几种方式主要有以下几种:1. 使用标准库:Python标准库中的urllib和urllib2模块可以用来发送HTTP请求,并获取API接口的响应数据。可以使用urllib.urlopen或urllib2.urlo
2023-09-02

java接口调用的方法有哪些

Java接口调用的方法有以下几种:1. 实现接口:通过实现接口的类来调用接口中定义的方法。实现接口的类必须实现接口中所有的方法。2. 匿名类:可以在需要的地方使用匿名类来调用接口中的方法。匿名类可以在定义的同时实现接口并调用接口中的方法。3
2023-08-08

webservice接口调用方式有哪些

WebService接口调用方式有以下几种:1. SOAP调用方式:使用Simple Object Access Protocol (SOAP)作为通信协议,通过发送XML格式的消息请求和接收响应来进行调用。2. RESTful调用方式:使
2023-09-21

Java如何调用第三方接口

这篇“Java如何调用第三方接口”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何调用第三方接口”文章吧。一、 通过
2023-07-02

java中如何调用对方接口

调用对方http接口步骤:URL url = new URL(path);1、打开和url之间的连接HttpURLConnection conn = (HttpURLConnection) url.openConnection();2、设置通用的请求属性con
java中如何调用对方接口
2015-11-19

java怎么调用第三方接口

在Java中调用第三方接口通常可以通过使用网络请求的方式来实现。以下是一种基本的方法:使用Java的内置网络请求类,比如HttpURLConnection或者HttpClient来发送HTTP请求到第三方接口的URL。根据第三方接口的要求
java怎么调用第三方接口
2024-03-05

Java调用wsdl接口的方法有哪些

本篇内容介绍了“Java调用wsdl接口的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、AXIS调用远程WebService,
2023-07-05

java调用restful接口的方法是什么

Java调用RESTful接口的方法有多种,以下是其中几种常用的方法:1. 使用Java内置的URLConnection类:可以通过创建URL对象,打开连接,设置请求方法(GET、POST、PUT、DELETE等),设置请求头,发送请求并获
2023-10-08

java调用webservice接口的方法有哪些

Java调用WebService接口的方法主要有以下几种:1. 使用JAX-WS(Java API for XML Web Services):JAX-WS是Java EE的一部分,它提供了一种简单的方式来创建和调用Web服务。可以使用ws
2023-08-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录