java接收text/event-stream格式数据

这篇具有很好参考价值的文章主要介绍了java接收text/event-stream格式数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java接收text/event-stream格式数据,并且解决接收HTTPS会不是流式输出问题

前段时间因为要对接语音转文字接口,对方接口输出的是text/event-stream返回,返回的是流式输出,本人在百度找了好久,一直没有找到关于怎么接收流式返回的文章,可能很多人不清楚流式输出指的是什么,流式输出是和对方建立一个长连接,接口方会一直不断的给我们推送数据,而不用等待对方接口完全输出后在把返回值一次性返回。

先贴代码

get请求

public String getEventStream(String urlStr, HttpServletResponse response) {
        long statr = System.currentTimeMillis();
        log.info("开始请求接口url:{}", urlStr);
        InputStream is = null;
        StringBuffer bu = new StringBuffer();
        try {
            URL url = new URL(urlStr);
            URLConnection conn = url.openConnection();
            is = conn.getInputStream();

            byte[] b = new byte[1024];
            int len = -1;
            long end = System.currentTimeMillis();
            log.info("接口url:{},请求开始流式输出{}", urlStr, end - statr);
            while ((len = is.read(b)) != -1) {

                String line = new String(b, 0, len, "utf-8");
                // 处理 event stream 数据
                response.getWriter().write(line);
                response.getWriter().flush();
                bu.append(line);
            }
        } catch (IOException e) {
            log.error("请求模型接口异常", e);
            throw new BusinessException(ResponseCode.TOPIC_INITIATION_FAILED);
        } finally {
            if (!Objects.isNull(is)) {
                try {
                    //12.关闭输入流
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return bu.toString();
    }

这里的urlStr参数是url加参数,示例:https://baidu.com?text=12345678
response是因为我需要同样用流式输出文字给前端,如果你不需要返回给前端,可以不用response参数。
文章来源地址https://www.toymoban.com/news/detail-524301.html

post请求

public String postEventStream(String urlStr, String json, HttpServletResponse response) {
        long statr = System.currentTimeMillis();
        log.info("开始请求接口url:{},请求参数{}", urlStr,json);
        InputStream is = null;
        //11.读取输入流中的返回值
        StringBuffer bu = new StringBuffer();
        try {
            //1.设置URL
            URL url = new URL(urlStr);
            //2.打开URL连接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //3.设置请求方式
            conn.setRequestMethod("POST");
            //4.设置Content-Type
            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
            //5.设置Accept
            conn.setRequestProperty("Accept", "text/event-stream");
            //6.设置DoOutput
            conn.setDoOutput(true);
            //7.设置DoInput
            conn.setDoInput(true);
            //8.获取输出流
            OutputStream os = conn.getOutputStream();
            //9.写入参数(json格式)
            os.write(json.getBytes("utf-8"));
            os.flush();
            os.close();
            //10.获取输入流
            is = conn.getInputStream();

            byte[] bytes = new byte[1024];
            int len = 0;
            long end = System.currentTimeMillis();
            log.info("接口url:{},请求参数{},请求开始流式输出{}", urlStr,json, end - statr);
            while ((len = is.read(bytes)) != -1) {
                String line = new String(bytes, 0, len, "utf-8");

                response.getWriter().write(line);
                response.getWriter().flush();
                bu.append(line);
            }
        } catch (IOException e) {
            log.error("请求模型接口异常", e);
            throw new BusinessException(ResponseCode.TOPIC_INITIATION_FAILED);
        } finally {
            if (!Objects.isNull(is)) {
                try {
                    //12.关闭输入流
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return bu.toString();

    }

第一次写文章,表达不好请谅解,这里使用的jdk版本是1.8,如果对于springboot怎么样返回给前端流式输出有疑问,可以私信问我

到了这里,关于java接收text/event-stream格式数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 日期接收报错:could not be parsed, unparsed text found at index 10(已解决)

    使用 Element-UI 的 el-date-picker 组件 将日期转给Java,Java报错 java.time.format.DateTimeParseException: Text ‘2024-01-03T16:00:00.000Z’ could not be parsed, unparsed text found at index 10 Vue Java实体类 Java控制层 当执行 toJavaObject 方法时,报错如下 java.time.format.DateTimeParseException: Text ‘2024-01-03T16:00:00.000Z’

    2024年01月23日
    浏览(29)
  • Spring MVC Http Event Stream

    Event Stream 技术是一种实现服务器推送事件的方法,它通过在一个持续的 HTTP 连接上发送事件流来实现推送。具体来说,服务器发送一些事件到客户端,并将这些事件封装成一些指定格式的文本流。客户端通过监听这个流,就能实时收到服务器推送的事件。 text/event-stream 是一

    2024年02月09日
    浏览(28)
  • 【已解决】Java 后端使用数组流 Array.stream() 将数组格式的 Cookie 转换成字符串格式

    🎉工作中遇到这样一个场景:远程调用某个接口,该接口需要用户的 Cookie 信息进行权限认证,认证通过之后才可以打通并返回数据。 在后端拿到 httpServletRequest 后,调用 getCookies() 方法,返回的是一个 Cookie 类型的数组。Debug 过程中拿到的 cookie 数据结构如下所示: 因此,需

    2024年02月11日
    浏览(39)
  • 别再混淆事件源(Event Sourcing)和消息流(Message Streaming)了!

    Kafka 不适合事件溯源,Kafka适合消息流。这两种事物需要不同存储机制。 事件溯源(Event Sourcing),需DB充当事件日志,为事件溯源存储的事件必须以某种方式编写,以便将来的读取能够快速组装属于单个聚合的较小(更小的)事件流最初发射它们的。这需要 随机访问索引 消

    2024年01月23日
    浏览(67)
  • Qt 使用HTTP请求网络API并接收返回的JSON格式的数据

    引入网络模块: mainwindow.h: mainwindow.cpp:

    2024年02月13日
    浏览(37)
  • 如何配置openai的返回Stream数据并转发到h5页面按markdown格式流式输出

    如何配置openai返回数据,保持流式输出,可以分段加载 可以使用OpenAI API的stream参数来实现流式输出,并且可以使用max_tokens参数控制每次返回数据的长度。 以下是一个示例代码,演示如何使用OpenAI API来实现流式输出并分段加载: 在这个示例中,我们将 stream 参数设置为 Tru

    2024年02月01日
    浏览(28)
  • Vue使用axios用post方式将表单中的数据以json格式提交给后端接收

    1.后端controller层代码代码 我采用的接收形式数据是json格式 2.前端登录注册界面代码 3.遇到的问题: 3.1. 我们首先在Vue data中定义一个存放表单数据的registform{},然后给它添加上属性,在表单input处使用v-model绑定。 3.2. 接下来将registform保存到datata变量中,然后就是axios的发送请

    2023年04月27日
    浏览(39)
  • spring-boot 接收form表单 多文件加多字段数据(postman在form-data格式下传数组和集合)

    前言 该博客多用于记录自己的问题  在写项目的时候遇到这种业务情况: 需要保存整个页面的数据,数据包含 多个字段信息 和 多个文件  结合网上的处理思路,我最终实现了这种业务需求并整理一下 前端单独提交字段和文件比较方便简单,本人不太了解前端,既然前端说

    2024年02月03日
    浏览(36)
  • Go语言项目后端使用gin框架接收前端发送的三种格式数据(form-data,json,Params)

    使用gin框架的BindJSON方法,将前端的json格式数据将后端的结构体相绑定,从而获取到前端所发送的数据,并返回给前端 1.将前端发送过来的数据全部返回 2.将前端发送过来的json格式数据选择性返回   使用gin框架的PostForm方法,从而获取到前端form格式的参数 使用gin框架中的

    2024年02月01日
    浏览(36)
  • 【教程】Python requests库POST方式接收Stream类型的响应

    转载请注明出处:小锋学长生活大爆炸[xfxuezhang.blog.csdn.net]  以前还要网上找半天教程,现在用ChatGPT可真的太太方便了! 国内免注册使用方法可以看这个:【工具】国内免加速免注册免费使用ChatGPT AI对话机器人 可以使用requests库的requests.post()方法,指定stream参数为True,然后

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包