是否可以使用PHP cURL获得部分响应?

是否可以使用PHP cURL获得部分响应?,php,curl,Php,Curl,这是我的密码 $url = "partial_response.php"; $sac_curl = curl_init(); curl_setopt($sac_curl, CURLOPT_HTTPGET, true); curl_setopt($sac_curl, CURLOPT_URL, $url); curl_setopt($sac_curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($sac_curl, CURLOPT_HEADER

这是我的密码

 $url = "partial_response.php";
 $sac_curl = curl_init();
 curl_setopt($sac_curl, CURLOPT_HTTPGET, true);
 curl_setopt($sac_curl, CURLOPT_URL, $url);
 curl_setopt($sac_curl, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($sac_curl, CURLOPT_HEADER, false);
 curl_setopt($sac_curl, CURLOPT_TIMEOUT, 11);
 $resp = curl_exec($sac_curl); 
 curl_close($sac_curl);
 echo $resp;
Partial_response.php

header( 'Content-type: text/html; charset=utf-8' );
echo 'Job waiting ...<br />';
for( $i = 0 ; $i &#60; 10 ; $i++ )
{
echo $i . '<br/>';
flush();
ob_flush();
sleep(1);
}
echo 'End ...<br/>';
标题('Content-type:text/html;charset=utf-8');
回显“等待作业…”;
对于($i=0;$i<;10;$i++)
{
回显$i。“
”; 冲洗(); ob_flush(); 睡眠(1); } 回显“结束…
”;
从about代码中,我试图从partial_response.php获得部分响应。我想要的是,我需要curl单独返回“Job waiting..”而不是等待partial_response.php完成循环并返回整个数据。因此,当我将CULLOPT_超时减少到11以下时,我根本没有得到任何响应。请澄清我的疑问。
提前谢谢。

不,恐怕不行。至少据我所知,这只是因为PHP是一种同步语言,这意味着不能“跳过”任务。(也就是说,
curl\u exec()
在请求完成之前,无论发生什么,都将一直执行)

我后来意识到curl不能做我想做的事情,我使用了
stream\u context\u get\u选项

实现我想要的。这里是,.

我不确定是否超时,但您可以使用cURL通过使用CURLOPT_WRITEFUNCTION标志获得部分响应:

curl\u setopt($ch,CURLOPT\u WRITEFUNCTION,$callback);
其中,
$ch
是Curl处理程序,
$callback
是回调函数名。此命令将从远程站点传输响应数据。回调函数可以类似于:

$result='';
$callback=函数($ch,$str){
全球$结果;
//$str将数据块流回。
$result.=$str;
//在这里,您可以使用$result或$str处理流数据。
//即,查找“Job waiting”字符串并终止响应。
return strlen($str);//不要碰这个
};
如果未在末尾中断,
$result
将包含来自远程站点的所有响应

因此,将所有内容组合在一起将类似于:

$result='';
$callback=函数($ch,$str){
全球$结果;
//$str将数据块流回。
$result.=$str;
//在这里,您可以使用$result或$str处理流数据。
//即,查找“Job waiting”字符串并终止响应。
return strlen($str);//不要碰这个
};
$url=“partial_response.php”;
$sac_curl=curl_init();
curl_setopt($sac_curl,CURLOPT_HTTPGET,true);
curl_setopt($sac_curl,CURLOPT_URL,$URL);
curl_setopt($sac_curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($sac_curl,CURLOPT_HEADER,false);
curl_setopt($sac_curl,CURLOPT_TIMEOUT,11);
curl_setopt($ch,CURLOPT_WRITEFUNCTION,$callback);
curl_exec($sac_curl);//现在以$result作为响应。
卷曲关闭($sac\u curl);
回声$结果;

那很好,有人能告诉我有没有其他方法可以用php解决这个问题?这不是真的。Curl以迭代的顺序获取数据,每个迭代都返回一定数量的数据(如果您考虑抓取大文件/页面,这一点就很明显)。您可以使用
CURLOPT\u WRITEFUNCTION
保存请求中的部分数据。我想问题不在于获取响应的末尾,而在于发送响应的末尾。我认为,由于您的
Partial_response.php
在其执行结束时发送数据,因此您永远不会在较低的超时时间内获得数据(它没有到达它的结尾,因此数据不会被发送)。尝试单独使用
flush()
函数或与
CURLOPT\u WRITEFUNCTION
结合使用以接收部分输出。这不是答案,请解释如何使用stream\u context\u get\u选项解决此问题