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

cURL-构造请求以验证服务器发送的事件,curl,server-sent-events,Curl,Server Sent Events,我不熟悉cURL和服务器发送的事件。我知道如何使用cURL和GET response构建一个简单的GET,POST请求。此外,理论上我知道服务器发送的事件是通过创建事件源的侦听器来处理的,但我不确定如何继续使用cURL验证任何此类API。非常感谢您的指导。SSE是一种基于文本的协议,而curl是准确排除连接发送内容故障的好方法。命令很简单: curl -N http://127.0.0.1/path/to/clock.php (-N停止任何缓冲,因此数据在接收时显示。) 它的输出是: data

我不熟悉cURL和服务器发送的事件。我知道如何使用cURL和GET response构建一个简单的
GET
POST
请求。此外,理论上我知道服务器发送的事件是通过创建事件源的侦听器来处理的,但我不确定如何继续使用cURL验证任何此类API。非常感谢您的指导。

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:”前缀的,还清楚地显示了双LFs。它将永远运行,直到您按下ctrl-c

唯一需要指出的是,您必须使用web服务器;您不能在文件://协议上运行SSE

要了解更多核心疑难解答,请添加
--verbose
,它将显示发送的标头和接收的标头

SSE确实支持cookies,您可以这样提供:(首先需要准备“cookies.txt”文件):

请参阅您可能需要考虑的其他选项。如果您正在对特定浏览器中的问题进行故障排除,请使用他们的devtools来准确地找出发送的标题,然后您可以告诉curl up也这样做


为了完整起见,下面是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);
    }

为了完整起见,您的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配合使用。
$ curl -N --http2 -H "Accept:text/event-stream" https://some.address.com/clocktimes