我正在使用 CURL 从服务器获取数据。它的工作方式如下:
现在让我们看看我运行以获得响应的代码:
<?php
$curl = curl_init('http://192.168.1.4/online?user=dneb');
curl_setopt($curl, CURLOPT_PORT, 1818);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($curl);
curl_close($curl);
echo $result;
通过这个 CURL 请求,我可以从路由应用程序中获取响应数据。但是路由应用程序永远不会停止向连接的客户端发送数据,所以只有当我关闭路由应用程序时我才会得到结果,它会将每个数据作为一个进行回显。现在我的问题是如何在不关闭连接或路由应用程序关闭的连接的情况下回显每个数据?即接收到数据后,无条件显示数据。您可以建议任何其他选项以使用 TCP 将此数据转发到另一台服务器。谢谢!
永远不会关闭的 http 连接?不要认为 php 的 curl 绑定适合那个。但是你可以使用socket api,
$sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_set_block($sock);
socket_connect($sock,"192.168.1.4",1818);
$data=implode("\r\n",array(
'GET /online?user=dneb HTTP/1.0',
'Host: 192.168.1.4',
'User-Agent: PHP/'.PHP_VERSION,
'Accept: */*'
))."\r\n\r\n";
socket_write($sock,$data);
while(false!==($read_last=socket_read($sock,1))){
// do whatever
echo $read_last;
}
var_dump("socket_read returned false, probably means the connection was closed.",
"socket_last_error: ",
socket_last_error($sock),
"socket_strerror: ",
socket_strerror(socket_last_error($sock))
);
socket_close($sock);
或者甚至是 http fopen,
$fp=fopen("http://192.168.1.4:1818/online?user=dneb","rb");
stream_set_blocking($fp,1);
while(false!==($read_last=fread($fp,1))){
// do whatever
echo $read_last;
}
var_dump("fread returned false, probably means the connection was closed, last error: ",error_get_last());
fclose($fp);
(如果 fopen 可以使用 80 以外的其他端口,则 idk。如果您allow_url_fopen
在 php.ini 中禁用,这也不起作用)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句