gpt4 book ai didi

php - 检测 HTTP 数据包的结尾

转载 作者:可可西里 更新时间:2023-11-01 16:24:49 26 4
gpt4 key购买 nike

我必须编写一个 PHP 脚本作为另一个 HTTP 服务器的客户端。此服务器忽略 HTTP Connection:Close header 并保持 TCP 连接打开,除非它被客户端关闭。这是我的困境。我(客户端)必须决定 HTTP 请求/响应何时完成,然后关闭连接。只需使用:

$data = file_get_contents($url);

.. 将不起作用,因为 file_get_contents 仅在连接超时(默认 30 秒)已达到时返回。

所以我必须像这样编写自己的读取循环(伪代码):

$sock = fsockopen(...);
$data = '';
while($line = fgets($sock)) {
$data .= $line;
if(http_package_recieved()) {
break;
}
}

不幸的是,响应中没有 Content-Length header 。我的问题是,功能如何

http_package_recieved()

...应该看起来像。

问候托斯滕

最佳答案

您可以检查 $line 是否为空以查看服务器是否未发送任何内容。您还可以使用 stream_set_timeout() 在套接字上设置一个小的读取超时,然后在循环内部检查 stream_get_meta_data() 以查看是否已达到以中断出。

关于php - 检测 HTTP 数据包的结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com