2

我正在使用一个简单的 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);

是否有一个条件我可以放在 url 周围,以便它只在 API 有积极响应时执行 cURL 脚本?我尝试了以下方法,但没有成功,因为它从未得到服务器响应来提供任何标头:

$url_headers = @get_headers($url);
if($url_headers[0] == 'HTTP/1.1 200 OK') {

    // do script
}

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

4

2 回答 2

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?!");
}
于 2012-12-10T17:55:30.747 回答
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;
    }
于 2012-12-11T09:04:32.803 回答