在PHP中使用CURL时,“您正在被重定向”消息

时间:2018-05-28 22:03:05

标签: php curl

在我的php页面中,我想根据其他值为用户调用另一个URL。 我的代码现在将转到新页面,但我需要点击消息

您正在被重定向。 // //

然后它将转到正确的页面。 如何调用新页面而不收到此消息? 到目前为止,这是我的代码。

    <?php

    require_once 'libs/Mobile_Detect.php';
    $detect = new Mobile_Detect;

    if ($detect->isMobile() )
        { 
        $url = $_GET["link2"];
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        $result = curl_exec($ch);
        curl_close($ch);

    }
    else{
        // "desktop";
        ?> <h1><?php echo $_GET["title"]; ?></h1>
        <iframe src='<?php echo $_GET["link"]; ?>' frameborder="1" 
             width="1311px" height="800px"></iframe>
      <?php
    }
    ?>

1 个答案:

答案 0 :(得分:0)

首先要尝试的是curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);,它对应于命令行参数curl -L

7.19.4之前的cURL版本(已包含在旧的,不再受支持的PHP版本中)无法正确检查从HTTP或HTTPS URI到本地文件的重定向。如mario在another answer中指出的那样,这可以用来规避open_basedir的限制。因此,对于这些版本的cURL,如果设置了safe_modeopen_basedir,则在程序尝试打开CURLOPT_FOLLOWLOCATION时,PHP会引发错误。这是fixed in PHP 5.5.3,并且该修复程序仍在所有受支持的PHP版本中。

如果打开CURLOPT_FOLLOWLOCATION不能解决重定向,则该站点可能根本没有使用301/302重定向,而是使用JavaScript重定向或不使用重定向来阻止自动化过程的滥用。这样做的站点希望用户通过手动导航(用鼠标单击,用触摸屏点击或使用Tab键并按Enter)来跟踪链接。为此,您必须解析HTML才能读取链接的目标。首先load the HTML into a DOMDocument,然后寻找具有令人满意的<a>属性的href元素。