PHP发送CURL请求并等待响应

10

我正在向一个服务器发送curl请求,该服务器需要几秒钟的时间来处理请求并输出响应。 我相信我的php脚本正在继续执行而不等待,因此基于响应的foreach循环会输出0个结果。 在继续处理数据之前,如何等待curl事务完成?

  $curl = curl_init();
  curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  curl_setopt($curl, CURLOPT_USERPWD, "admin:password");
  curl_setopt($curl, CURLOPT_URL, "http://server/r/?dst_user__substr='user'");


  curl_setopt($curl, CURLOPT_VERBOSE, 1);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $ret = curl_exec($curl);
  $result = json_decode($ret,true);

 <<<<I need to wait until transaction is complete here>>>>

  foreach ($result['data'] as $key => $value)
  {
        //process data from $result
  }

3
据我所知,它会在继续运行脚本之前等待响应。 - Kemal Fadillah
1
尝试在 $ret = curl_exec... 行后添加 if ($ret===false) echo curl_error($curl); - 可能是命令等待响应超时了。 - Clart Tent
2个回答

23

curl是阻塞式的,这意味着:

$result = json_decode($ret,true);

foreach ($result['data'] as $key => $value)
{
      //process data from $result
}

直到以下情况发生才会执行:

$ret = curl_exec($curl);

已经完成。您可以使用curl_error()检查错误和其他问题,并通过curl_getinfo()检查HTTP响应代码。


0
这真的很奇怪!它不应该像你所得到的那样发生。但无论如何,请尝试以下方法...
获取一个HTTP响应代码,然后进行检查...
$curl = curl_init();
  curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  curl_setopt($curl, CURLOPT_USERPWD, "admin:password");
  curl_setopt($curl, CURLOPT_URL, "http://server/r/?dst_user__substr='user'");


  curl_setopt($curl, CURLOPT_VERBOSE, 1);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  $ret = curl_exec($curl);
  $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
  if($httpcode==200)
  {
  $result = json_decode($ret,true);
  foreach ($result['data'] as $key => $value)
  {
        //process data from $result
  }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接