cURL - 结构化验证服务器发送事件的请求

问题描述 投票:4回答:2

我是cURL和服务器发送事件的新手。我知道如何使用cURL构建一个简单的GET,POST请求并获得响应。另外,从理论上讲,我知道服务器发送事件是通过创建事件源的监听器来处理的,但我不知道如何继续使用cURL验证任何此类API。任何指导表示赞赏。

curl server-sent-events
2个回答
8
投票

SSE是一种基于文本的协议,curl是一种很好的方法,可以准确地解决连接发送的问题。命令很简单:

curl http://127.0.0.1/path/to/clock.php

它输出这个:

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确实支持cookie,您可以这样提供:(您首先必须准备“cookies.txt”文件):

curl --cookie cookies.txt http://127.0.0.1/path/to/clock.php

为了完整性,这里是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);
    }

4
投票

为了完整性,您的curl命令应如下所示:

$ curl -N --http2 -H "Accept:text/event-stream" https://some.address.com/clocktimes

应该将-H作为最佳实践包含在内,因为如果您的服务器已将其他协议绑定到同一端口,则无法消除协议的歧义。

例如,如果端口443用于HTTPS和SSE,那么您将需要提供-H标头,以便服务器知道这是一个SSE请求。

上面的示例假定服务器正在使用HTTP / 2。如果没有,请删除--http2参数并将方案从https://更改为http://

最后,-N参数非常重要,因为curl会缓冲响应。因此,您的服务器可能会发送一些数据,但由于卷曲缓冲,它不会在屏幕上呈现。无论何时使用curl进行流式传输,都应该包含此标志。

© www.soinside.com 2019 - 2024. All rights reserved.