Postman或Chrome可以显示REST流输出吗?

19

我有一个REST服务器,它应该将纯文本输出作为流发送,但当我使用Postman或Chrome执行REST调用时,我会在过程结束时一次性得到整个输出而不是得到流。

这是我的REST服务器,灵感来自于这篇文章

@GET
@Path("/stream-test")
@Produces(MediaType.TEXT_PLAIN)
public Response streamTest(){
  StreamingOutput stream = new StreamingOutput() {
    @Override
    public void write(OutputStream os) throws IOException, WebApplicationException {
      Writer writer = new BufferedWriter(new OutputStreamWriter(os));
      for (int i=1; i<=10; i++) {
        writer.write("output " + i + " \n");
        try {
          Thread.sleep(500);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
      writer.flush();
    }
  };
  return Response.ok(stream).build();
}

输出行都同时显示。我想每500毫秒看到一个输出。

我的实现有问题吗?

还是Postman和Chrome无法显示流式输出?

注意:由于技术原因,我仍然使用Postman作为Chrome应用程序。


你需要使用Postman吗?我认为它不会流式传输,但如果你正在使用Chrome应用程序,你不能使用开发工具控制台来测试你所需的内容吗? - Danny Dainton
我主要使用Postman,因为我习惯了它,并且那里保存了我喜爱的API请求,而DevTools似乎不是REST调用的正确工具。即使如此,我尝试过,但只能像在Postman中全执行后才能看到输出结果。 - ThCollignon
好的,使用开发工具只是一个建议,因为您想要查看数据流,而Postman无法实现。您可以从Postman内部获取AJAX代码片段,并在Dev Tools控制台中使用它,或者作为cURL请求使用,并在终端中查看数据流。我认为Postman不会给你想要的东西。链接的问题是进行标准请求,而不是尝试流式传输数据。 - Danny Dainton
5个回答

10

如果你需要进行流式传输,那么仅仅从POSTMAN中获取CURL请求是不够的。

在我的情况下,需要使用选项--no-buffer并将其附加到请求中,这样才能正常工作。


8

cURL能够做什么?

在使用服务器发送事件时,我遇到了同样的问题。我采用了Linux机器上的cURL解决了这个问题。我相信Windows也有类似于cURL的替代工具。


2
Ya,真的curl很棒。 - Gaurav Rawat
你能分享一下curl请求吗? - nil96
@nil96 - 简单的 curl 命令加上 URL 将会在流式传输时打印出响应。 - tim-montague
cURL 对于使用 HTTP/1 分块传输编码的情况也可以正常工作。 - tim-montague

5

2
Postman仍然无法将响应作为流打印。 - tim-montague

2

2
this isn't for the responses - blockhead

-1

curl -H 'X_BU_ID:anythingUwant' -H 'Content-Type: multipart/form-data' -v -F 'file=@filePath/abc.csv' http://localhost:35681/stream-test

使用curl命令发送HTTP请求,其中包含自定义的请求头信息和文件上传功能。请求头中包含了一个名为X_BU_ID的自定义字段,其值可以任意指定。同时,请求体中通过multipart/form-data格式上传了一个名为abc.csv的文件,该文件位于本地文件系统的filePath目录下。最后,请求的URL地址为http://localhost:35681/stream-test


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接