Obj*_*ift 7 curl server-sent-events
我是cURL和服务器发送事件的新手.我知道如何使用cURL构建一个简单的GET,POST请求并获得响应.另外,从理论上讲,我知道服务器发送事件是通过创建事件源的监听器来处理的,但我不知道如何继续使用cURL验证任何此类API.任何指导表示赞赏.
Dar*_*ook 12
SSE是一种基于文本的协议,curl是一种很好的方法,可以准确地解决连接发送的问题.命令很简单:
curl -N http://127.0.0.1/path/to/clock.php
Run Code Online (Sandbox Code Playgroud)
它输出这个:
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
Run Code Online (Sandbox Code Playgroud)
注意它如何显示SSE协议的"data:"前缀,并且还清楚地显示了双LF.它会永远运行,直到你按ctrl-c.
关于唯一要指出的是你必须使用Web服务器; 你不能通过file://协议运行SSE.
要进行更多的核心故障排除,请添加-N
,这将显示正在发送的标头以及正在接收的标头.
SSE确实支持cookie,您可以这样提供:(您首先必须准备"cookies.txt"文件):
curl -N --cookie cookies.txt http://127.0.0.1/path/to/clock.php
Run Code Online (Sandbox Code Playgroud)
为了完整性,这里是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);
}
Run Code Online (Sandbox Code Playgroud)
为了完整起见,您的curl命令应如下所示:
$ curl -N --http2 -H "Accept:text/event-stream" https://some.address.com/clocktimes
Run Code Online (Sandbox Code Playgroud)
该-N
参数非常重要,因为curl可以缓冲响应。因此,您的服务器可能已经发送了一些数据,但是由于curl缓冲,它没有显示在屏幕上。每当您使用curl进行流式传输时,都应包含此标志。
本-H
应作为最佳做法,因为如果你的服务器已经结合其它协议到同一个端口,就无法消除歧义的协议。
例如,如果端口443用于HTTPS和SSE,则需要提供-H
标头,以便服务器知道这是SSE请求。
上面的示例假定服务器正在使用HTTP / 2。如果不是,请删除--http2
参数并将方案从更改https://
为http://
归档时间: |
|
查看次数: |
8453 次 |
最近记录: |