【问题标题】:Get final redirect with Curl PHP使用 Curl PHP 获得最终重定向
【发布时间】:2016-05-04 19:29:55
【问题描述】:

我必须从这个:https://web.archive.org/web/20070701005218/http://www.maladnews.com/ 获取最终的重定向 url,它实际上重定向到这个:https://web.archive.org/web/20080109064420/http://www.maladnews.com/Site%203/Malad%20City%20&%20Oneida%20County%20News/Malad%20City%20&%20Oneida%20County%20News.html

我尝试了其他适用于其他网站但不适用于上述链接的 stackoverflow 答案中的答案。

我已尝试提取常规位置标头:

if(preg_match('#Location: (.*)#', $html, $m))
 $l = trim($m[1]);

还检查了javascript方式:

preg_match("/window\.location\.replace\('(.*?)'\)/", $html, $m) ? $m[1] : null;

请帮忙!

【问题讨论】:

    标签: php redirect curl http-headers url-redirection


    【解决方案1】:

    根据您的用例将curl_getinfo()CURLINFO_REDIRECT_URLCURLINFO_EFFECTIVE_URL 结合使用。

    CURLINFO_REDIRECT_URL - 禁用 CURLOPT_FOLLOWLOCATION 选项:在最后一个事务中找到重定向 URL,接下来应该手动请求。启用 CURLOPT_FOLLOWLOCATION 选项后:这是空的。在这种情况下,重定向 URL 在CURLINFO_EFFECTIVE_URL 中可用

    -- http://php.net/manual/en/function.curl-getinfo.php

    示例:

    <?php
    $url = 'https://google.com/';
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    
    $html = curl_exec($ch);
    
    $redirectedUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    
    curl_close($ch);
    
    echo "Original URL:   " . $url . "\n";
    echo "Redirected URL: " . $redirectedUrl . "\n";
    

    当我运行这段代码时,输​​出是:

    Original URL:   https://google.com/
    Redirected URL: https://www.google.com/
    

    【讨论】:

    • 我之前试过,然后又试了一次here,但由于某种原因,它会输出初始网址...您能修改代码以使其正常工作吗?
    • 您链接的代码有 2 个问题。 1)您正在测试的网址无效。 (您可以将其更改为https://google.com/,它会重定向到https://www.google.com/。)2) 对curl_getinfo($ch,CURLINFO_EFFECTIVE_URL) 的调用需要在调用curl_exec($ch) 之后立即移动,因为此时您'正在调用它,尚未遵循重定向。
    • 感谢您的指出,但是我正在测试的 url 是有效的,因为它是我正在运行 curl 的 url(它也在问题描述中提到),我也尝试了不同的 getinfo 调用位置,但是它仍然返回相同的结果...看起来重定向是通过 Javascript 或在初始页面加载几秒钟后通过一些刷新元标记完成的,并且 curl 不跟随页面。请检查相关链接。
    • 我指的无效url是here,肯定不对。它在域名中有一堆点,点,点。此外,curl 不解析任何 javascript。您将只能使用 curl 来跟踪 HTTP 级别的重定向。我将使用仅适用于 curl 的示例更新我的代码,以说明 HTTP 重定向功能。
    • 我明白了,实际上https://w...content-available-to-author-only...e.org/web/20070701005218/http://w...content-available-to-author-only...s.com/ 是该站点 (ideone.com) 屏蔽 php 脚本中的 url 的方式,并且它仅可用于发布作者,但它不影响脚本工作(您可以重新运行通过分叉/编辑它)。该站点只是一个 php 沙箱。如果您的示例不适用于问题描述中的 url,我无法接受。就像问题所述,我之前尝试过不同的解决方案,包括您提供的解决方案,但我正在寻找该特定网址的解决方案
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    • 2016-11-14
    • 2021-02-15
    • 2017-03-02
    相关资源
    最近更新 更多