使用cURL没有来自XML的响应

时间:2012-12-10 17:37:24

标签: php xml api curl

我使用简单的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
}

非常感谢任何帮助/建议!

2 个答案:

答案 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;
    }