【问题标题】:No response from XML using cURL使用 cURL 没有来自 XML 的响应
【发布时间】:2012-11-28 04:09:12
【问题描述】:

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

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

【问题讨论】:

  • 您是否尝试在 get_headers() 之前删除 @ 以显示任何错误?
  • 查看错误日志以查看导致脚本崩溃的错误。
  • @Titanium - 我试过了,但还是不行
  • @Ranty - 错误在 API 端,我会看看 API 提供者是否有任何原因导致它超时。

标签: php xml api curl


【解决方案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?!");
}

【讨论】:

  • 感谢您的意见,我下面的答案对我有用,但您的看起来也应该有用。
  • @AdamMoss 没问题,我的回答只解决了知道请求何时失败(无论出于何种原因)的部分;它没有考虑应该设置超时以避免在放弃之前必须等待 60 秒。
【解决方案2】:

最后,我能够通过使用 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;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2016-06-05
    • 1970-01-01
    • 2020-01-11
    相关资源
    最近更新 更多