cURL - 构建请求以验证服务器发送的事件

33

我刚接触cURL和服务器发送事件。我知道如何使用cURL构建简单的GETPOST请求并获取响应。理论上我知道服务器发送事件是通过创建事件源的监听器来处理的,但我不确定如何使用cURL验证任何此类API。 感谢您的任何指导。

2个回答

55
SSE 是一种基于文本的协议,而 curl 是一个很好的方式,可以准确地排查你的连接发送了什么。命令非常简单:
curl -N http://127.0.0.1/path/to/clock.php

-N 停止任何缓冲,因此数据会按接收到的方式显示。)
并且它输出如下内容:
data:2015-07-07 06:19:27

data:2015-07-07 06:19:28

data:2015-07-07 06:19:29

data:2015-07-07 06:19:30

data:2015-07-07 06:19:31

data:2015-07-07 06:19:32

注意它如何显示SSE协议的"data:"前缀,并清楚地显示双LF。它会一直运行,直到你按下ctrl-c。
唯一需要指出的是,你必须使用一个Web服务器;你不能在file://协议上运行SSE。
对于更深入的故障排除,添加--verbose,它将显示发送的头部和接收到的头部。
SSE支持cookies,你可以像这样提供它们:(你首先必须准备好"cookies.txt"文件):
curl -N --cookie cookies.txt http://127.0.0.1/path/to/clock.php

查看其他答案curl文档,了解您可能要考虑使用的其他选项。如果您在特定浏览器中遇到问题,请使用其开发工具查找发送的确切标头,然后您可以告诉curl执行相同操作。
为了完整起见,这是clock.php脚本的内容:
<?php 
set_time_limit(0);
header("Content-type: text/event-stream");

while(1){
    echo "data:" . date("Y-m-d H:i:s") . "\n\n";
    @ob_flush();flush();
    sleep(1);
    }

26

为了完整起见,你的curl命令应该像这样:

$ curl -N --http2 -H "Accept:text/event-stream" https://some.address.com/clocktimes
-N 参数非常重要,因为 curl 会缓存响应。因此,可能您的服务器已发送某些数据,但由于curl缓冲,这些数据没有在屏幕上呈现出来。每当您使用curl进行流传输时,都应包括此标志。
最好实践是包括 -H ,因为如果您的服务器将其他协议绑定到相同的端口,则无法区分协议。
例如,如果端口443用于HTTPS和SSE,则需要提供-H 标头,以便服务器知道这是一个SSE请求。
以上示例假定服务器正在使用HTTP/2。如果不是,删除 --http2 参数并将方案从https://更改为http://

适用于Java 8 SSE。 - MUNGAI NJOROGE

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