【问题标题】:Are Squarespace RSS feeds blocked by PHP file pull requests?Squarespace RSS 提要是否被 PHP 文件拉取请求阻止?
【发布时间】:2021-02-10 02:16:07
【问题描述】:

Squarespace 为所有使用其服务的博客等提供内置 RSS 提要,您可以通过将 ?format=rss 附加到博客 URL 的末尾来查看任何博客的 RSS 提要。例如,http://denverdarling.com/home 是 Squarespace 的博客,您可以通过 http://denverdarling.com/home?format=rss 查看该博客的 RSS 源

当您在浏览器的地址栏中手动输入 RSS 提要的 URL 时,它会毫无问题地显示 RSS 内容。但是,当我尝试使用 PHP 脚本提取相同的内容时,每次都会收到错误提示“HTTP 请求失败!HTTP/1.0 400 错误请求”

我尝试了几个不同的 PHP 函数来提取内容,但它们都导致相同的错误。我还尝试了几个不同的 Squarespace 博客,但它们都再次导致相同的错误。我尝试过的 PHP 函数包括:file_get_contentsfopensimplexml_load_fileDOMDocument()->load() 等。这些都导致“HTTP 请求失败!HTTP/1.0 400 错误请求”错误。

我在谷歌上看到的唯一一件事是你不能为受密码保护的博客拉取 RSS 提要,但由于我尝试拉取提要的博客都没有密码保护,所以我'不知道发生了什么。

【问题讨论】:

    标签: php rss squarespace


    【解决方案1】:

    他们可能会阻止无头用户代理

    <?php
    
    $url = "http://denverdarling.com/home?format=rss";
    
    $options = array(
      'http'=>array(
        'method'=>"GET",
        'header'=>"Accept-language: en\r\n" .
                  "User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad 
      )
    );
    
    $context = stream_context_create($options);
    $file = file_get_contents($url, false, $context);
    
    var_dump($file);
    

    这可行,他们或他们的主机正在检查请求中的标头并过滤掉特定内容

    【讨论】:

    • 嗨@Ryan,我遇到了与amazon.com 相同的问题,使用file_get_contents 并添加标题以模拟浏览器请求,它工作了几天。但是,两天以来,亚马逊将其视为无标题请求并且无法获取信息。我正在使用"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36\r\n")。有什么建议吗?
    • 嗨@theKing,抱歉耽搁了,我想我能想到的是在浏览器上打开开发工具,看看如果你尝试在浏览器上重现问题会发生什么,他们可能正在使用重定向来阻止这些类型的请求。如果您需要更强大的工具,我强烈建议您将 Guzzle 拉入您的项目 docs.guzzlephp.org
    猜你喜欢
    • 2022-01-24
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多