Azure上的SimplePie无法解析https源

时间:2016-09-22 11:28:58

标签: php azure rss azure-web-sites simplepie

我正在使用SimplePie 1.4.2的编译版本(GitHub上的最后一个标记版本)来聚合一些rss / atom feed(如果需要,可以在下面编写代码)。

它适用于几个基于Linux的Web主机,但是当我将其上传到Azure app services时,只有http源显示正确,但https不会。

为什么会这样?在两个环境中都不使用PHP 5.6在Web应用程序上设置特定设置。没有差异通过http或https访问azure Web应用程序。

谢谢大家!

<?php
date_default_timezone_set('Europe/Rome');
set_time_limit(0);
header('Content-Type: application/rss+xml; charset=UTF-8');
require_once('SimplePie.compiled.php');

[...]

echo '<?xml version="1.0" encoding="UTF-8"?>'; 
?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title><?php echo $feedtitle; ?></title>
<atom:link href="<?php echo $feedlink; ?>" rel="self" type="application/rss+xml" />
<link><?php echo $feedhome; ?></link>
<description><?php echo $feeddesc; ?></description>
<?php
$feed = new SimplePie();
$feed->set_feed_url($feeds);
$feed->force_feed(true);
$feed->init();
$feed->handle_content_type();
foreach($feed->get_items() as $item) {
    ?>
    <item>
        <title><?php echo $item->get_title(); ?></title>
        <link><?php echo $item->get_permalink(); ?></link>
        <guid><?php echo $item->get_permalink(); ?></guid>
        <pubDate><?php echo $item->get_date('D, d M Y H:i:s T'); ?></pubDate>
        <dc:creator><?php if ($author = $item->get_author()) { echo $author->get_name()." at "; }; ?><?php if ($feed_title = $item->get_feed()->get_title()) {echo $feed_title;}?></dc:creator>
        <description><![CDATA[<?php echo $item->get_content(); ?>]]></description>
    </item>
    <?
};
?>
</channel>
</rss>

1 个答案:

答案 0 :(得分:1)

它不适用于“https”网址,因为SimplePie利用cURL发出http请求,而对于https请求,cURL需要验证主机或对等证书。

您可以尝试使用以下代码段来绕过验证。

$simplePie = new SimplePie();
$simplePie->set_curl_options(
    array(
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_SSL_VERIFYPEER => false
    )
);

以下是https://github.com/simplepie/simplepie/pull/407

的类似情况