【问题标题】:RSS WordPress SimplePie claiming valid URL as invalidRSS WordPress SimplePie 声称有效 URL 无效
【发布时间】:2012-12-18 18:08:10
【问题描述】:

我正在尝试使用 Wordpress 的内置 SimplePie 加载 RSS 提要。

include_once(ABSPATH . WPINC . '/feed.php');
$rssURL = 'http://missionstkitts.blogspot.com//feeds/posts/default';
$rss = fetch_feed($rssURL);

为了调试,我使用了 print_r($rss);我得到一个 WordPress 错误对象:

WP_Error Object
(
    [errors] => Array
        (
            [simplepie-error] => Array
                (
                    [0] => WP HTTP Error: A valid URL was not provided.
                )

        )

    [error_data] => Array
        (
        )

)

但是,令人沮丧的是,如果我打印 $rssURL 然后复制并粘贴它,它会直接进入正确的提要。怎么回事?

【问题讨论】:

标签: wordpress rss simplepie


【解决方案1】:

由于这是谷歌的第一个热门,可能值得我添加这个可能的解决方案:

对于我们的示例 - 一个 Intranet 站点,从另一个内部页面提取 rss 提要,该提要又解析为 RFC1918 私有地址,该提要因安全原因被 Wordpress 的 URL 检查器阻止。

在我的实例中,最简单的解决方法是将以下内容添加到 functions.php 中,但这确实有安全隐患,因此请确保在添加之前了解它:

add_filter( 'http_request_args', function( $args ) {
   $args['reject_unsafe_urls'] = false;
   return $args;
} );

更多讨论和更多信息,请访问 -https://core.trac.wordpress.org/ticket/24646

【讨论】:

  • 这个解决方案非常适合我。这个问题发生在一个严格的防火墙服务器上,其中一个站点从同一服务器上的一个子域请求 rss 提要。防火墙回复内部传输的私有地址这一事实触发了 wordpress 安全策略。这是在 wordpress 更新到 4.4 版后突然发生的。谢谢!
  • 很高兴知道安全隐患是什么。我想让一个特定的 url 作为白名单通过,但保留开发团队认为需要的安全性。当我们需要适用于我们自己网络上的子域的东西时,删除它就像是一个锤子解决方案。
【解决方案2】:

通过为特定的 url 添加 preg_match,我们可以最小化解析的不安全 url 的数量:

function http_request_local( $args, $url ) {
   if ( preg_match('/xml|rss|feed/', $url) ){
      $args['reject_unsafe_urls'] = false;      
   }
   return $args;
}
add_filter( 'http_request_args', 'http_request_local', 5, 2 );

【讨论】:

    【解决方案3】:

    因此,尽管上述答案有效,但我认为有一种方法可以更好地确保您将发出 URL 请求的范围限制在其中,而不是允许一切进行。因此,我向任何偶然发现此信息的人证明以下信息,以防万一。

    如果结果调用是针对在私有 IP 上交叉通信但仍可公开访问的内部服务器,则此答案很有用。

    下面的 sn-p 将在调用 RSS 提要的站点上运行。提供提要的网站不需要这个。

    add_filter('http_request_host_is_external', function($bool, $host, $url){
            if($url === 'https://www.example.com/news/feed/' && $host === 'www.example.com'){
                    return true;
            }
    }, 10, 3);
    

    【讨论】:

    • 七年后,我很感激?
    • 我知道的没错!我只是对缺乏这方面的信息感到惊讶。我很高兴我能让你开心:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多