0

我正在使用 CURL 和代理来获取一些 xml 文件,当我尝试加载/使用 xml (simplexml_load_string) 时,有时只有部分 XML 文档通过并失败。

我想像..

    if(curl_errno($ch))
    {
        $error = curl_error($ch);
        // handle error
    }

将通过 CURL errno 捕获此排序错误。

CURLE_PARTIAL_FILE (18)

文件传输比预期短或大。当服务器首先报告预期的传输大小,然后交付与先前给定大小不匹配的数据时,就会发生这种情况。

但是,这不起作用,我认为这可能是由于使用了代理。还有什么我可以检查的吗?我现在唯一的想法是为 XML 文档的最后一点做一个 preg_match ,但这似乎不太理想,因为我正在获取多种类型的 XML 文档并且我必须为每种类型编写检查。

4

2 回答 2

1

我在使用代理时遇到了同样的问题,但我没有使用 cURL 的错误处理程序解决这个问题。如果您可以访问这两个脚本(一个请求和一个交付 XML),那么请求的一个会交付它期望在 XML 末尾的唯一代码:

// Request
http://localhost/getxml.php?id=4&uniq=1337

并在输出末尾附加注释:

<?xml encoding="..." ..?>
...
<!--1337-->
于 2010-12-05T08:17:25.030 回答
1

好吧,有一个错误已经告诉你你得到的 XML 文件是无效的。您需要做的是捕获该错误并处理它。

一个快速解决方法是:

$xml = @simplexml_load_string($xmlString);
if($xml === false){ /* The XML was not valid. */ }

一个日志修复是这个:

libxml_use_internal_errors(true);
libxml_clear_errors();
$xml = simplexml_load_string($xmlString);
if( ($err = libxml_get_last_error()) !== false ){ /* We got ourselves an XML error. */ }
于 2010-12-05T08:20:52.793 回答