当前位置: 首页 > 知识库问答 >
问题:

PHP更新后,使用CURL从URL获取XML停止工作

狄溪叠
2023-03-14

我使用以下函数从密码保护的https url接收xml文件。

function get_fcontent( $url,  $javascript_loop = 0, $timeout = 5 ) {

    $url = str_replace( "&", "&", urldecode(trim($url)) );
    $cookie = tempnam ("/tmp", "CURLCOOKIE");
    $ch = curl_init();

    curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" );
    curl_setopt( $ch, CURLOPT_URL, $url );
    curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie );
    curl_setopt( $ch, CURLOPT_ENCODING, "" );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_AUTOREFERER, true );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );    # required for https urls
    curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
    curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout );
    curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 );
    $content = curl_exec( $ch );
    $response = curl_getinfo( $ch );
    curl_close ( $ch );

    if ($response['http_code'] == 301 || $response['http_code'] == 302) {
        ini_set("user_agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1");

        if ( $headers = get_headers($response['url']) ) {
            foreach( $headers as $value ) {
                if ( substr( strtolower($value), 0, 9 ) == "location:" )
                    return get_url( trim( substr( $value, 9, strlen($value) ) ) );
            }
        }
    }

    if (    ( preg_match("/>[[:space:]]+window\.location\.replace\('(.*)'\)/i", $content, $value) || preg_match("/>[[:space:]]+window\.location\=\"(.*)\"/i", $content, $value) ) && $javascript_loop < 5) {
        return get_url( $value[1], $javascript_loop+1 );
    } else {
        return array( $content, $response );
    }
}

在我们的服务器将php更新到7.0版本之前,一切正常。22

在那之后,我再也不能接收xml文件了。我只是得到一个空洞的回答。有人知道为什么吗?

编辑:我不知道什么php版本安装之前,我们不能降级。

共有1个答案

董建茗
2023-03-14

再次安装与您的版本兼容的php curl。检查这个答案:如何使用PHP7安装ExtCurl扩展?如果你是linux。

 类似资料:
  • 我是Android编程的业余爱好者。我使用Jsoup从一个网站获取html并将其放入textview,但我得到了错误。我该怎么解决这个? 我的代码: 我的错误:

  • 我最近更新了android studio和它的插件,一切正常。但突然发生了这种事,我知道该怎么解决了。应用程序运行了,但出现了一些意想不到的行为。尝试同步gradle,卸载和重新安装更新,但似乎没有任何工作。

  • 问题内容: 我正在尝试创建一个数据表,该数据表在忙时显示一个blockUI,并且我大多数时候都成功了。现在,当我单击两个commandButtons中的任何一个,通过单击标题对数据表进行排序,或在数据表中翻页时,它都会变灰并显示“正在加载…”。您可以在下面查看其代码。 问题是,在我使用了一个commandButtons(在受阻止的元素上运行ajax更新)之后,后续操作不会触发blockUI(直到刷

  • 突然,我的作曲家停止了创作。 无论何时运行,它都不会在此之后继续运行: 使用包信息加载composer存储库更新依赖项(包括需要开发) 我尝试了另一个Laravel项目,该项目的作曲家正在工作 我清除了缓存,并运行了这个命令 似乎什么也没发生。我将移动到另一个文件夹,从当前项目中删除并再次运行命令,但没有成功 这是我的文件:

  • 问题内容: 我需要使用CURL从URL保存图像并将其保存到服务器上的文件夹中。我一直在努力与这段代码无济于事。理想情况下,我想获取图像并将其另存为“ photo1”或其他内容。帮帮我! 问题答案: 尝试这个: 并确保在php.ini中启用allow_url_fopen

  • 问题内容: 在页面重定向(最好使用curl或wget)之后,我需要获取最终的URL。 例如, http://google.com 可以重定向到 http://www.google.com 。 内容很容易获得(例如),但是我只对最终URL(在前一种情况下为http://www.google.com)感兴趣。 仅使用Linux内置工具有什么方法可以做到这一点?(仅命令行) 问题答案: 的选项和sub变