我使用简单的cURL语句来解析我网站上的XML。当API启动并正常工作时,它工作正常,但是一旦API由于任何原因导致整个站点崩溃,就会崩溃。
$url = 'http://www.mydomain.com/webservicexample';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch);
curl_close($ch);
$xml = new SimpleXmlElement($data);
是否存在条件我可以放置网址,以便只有来自API的肯定响应它才会执行cURL脚本?我尝试了以下但它没有工作,因为它从来没有得到任何标题的服务器响应:
$url_headers = @get_headers($url);
if($url_headers[0] == 'HTTP/1.1 200 OK') {
// do script
}
非常感谢任何帮助/建议!
答案 0 :(得分:1)
您可以查看curl_exec()
的返回值:
if (false === ($data = curl_exec($ch))) {
die("Eek! Curl error! " . curl_error($ch));
}
并检查响应标题:
if (200 !== (int)curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
die("Oh dear, no 200 OK?!");
}
答案 1 :(得分:0)
最后,我能够通过CURLOPT_TIMEOUT和CURLOPT_CONNECTTIMEOUT设置超时时间来使其工作,然后使用curl_errno()为它设置条件。
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$data = curl_exec($ch);
if(!curl_errno($ch))
{
curl_close($ch);
$xml = new SimpleXmlElement($data);
return $xml;
}