【问题标题】:Can Access External Website Sitemap.xml from my Browser, but not using cURL可以从我的浏览器访问外部网站 Sitemap.xml,但不能使用 cURL
【发布时间】:2019-01-20 16:39:51
【问题描述】:

我正在尝试使用 PHP 和 cURL 从 Amazon EC2 实例上的自定义构建 wordpress 插件访问网站的 sitemap.xml 文件。 这个网站的sitemap.xml 文件只有13 项,是一个很小的文件。 当我在浏览器中输入“https://www.example.com/sitemap.xml”时,我可以查看该文件。我在实例的 php.ini 文件中启用了“fopen”。我的PHP代码很简单,但是脚本运行了很长时间(几分钟)没有结果并且报错:

 TCP connection reset by peer

function getThisSiteMap(){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, 'https://www.example.com/sitemap.xml');
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt($ch, CURLOPT_ENCODING, '');
 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36');
 $feed = curl_exec($ch);
    if (curl_error($ch)) {
    $error_msg = curl_error($ch);
    }
    $xmlTermsIR = simplexml_load_string($feed);

    if ($xmlTermsIR) {
       echo 'HEELLEOO';
    } else {
        echo 'NOT WORKING' . '<br>';
        echo $error_msg;
     }
    }

我有点困惑,因为我可以使用相同的代码访问其他 sitemap.xml 文件。我需要使用不同的用户代理吗?如何使用 cURL 访问此 sitemap.xml?任何帮助将不胜感激。

【问题讨论】:

    标签: php wordpress curl amazon-ec2


    【解决方案1】:

    我会通过 SSH 连接到服务器,看看是否可以:

    curl https://www.example.com/sitemap.xml
    

    这将告诉您这是代码问题还是根本无法从服务器解析域。我也会尝试回显 $feed 并省略 simplexml_load_string(),只是看看它是否挂在请求上。

    您还可以通过将以下内容放在顶部来启用 php 日志并查看它是否正在死亡而不是完成时没有输出

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);
    

    【讨论】:

    • 感谢您的帮助 iDanoo,我通过 SSH 连接到服务器并简单地运行: curl example.com/sitemap.xml 。它奏效了!!!所以现在我真的很困惑问题是什么!
    • 嗯,我肯定会尝试错误日志方法,看看是否有任何可能有用的输出。如果您在 PHP 的顶部添加上述错误代码,它应该会根据您的 php 版本输出到 /var/log/*.log 的某个位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 2019-02-25
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    相关资源
    最近更新 更多