首页 > 解决方案 > PHP - 在所有重定向后从 url 获取最终 url (curl + php)

问题描述

// From URL to get redirected URL
$url = 'https://www.shareasale.com/m-pr.cfm?merchantID=83483&userID=1860618&productID=916465625';
  
$ch = curl_init(); // create cURL handle (ch)
if (!$ch) {
    die("Couldn't initialize a cURL handle");
}
// set some cURL options
$ret = curl_setopt($ch, CURLOPT_URL,            $url);
$ret = curl_setopt($ch, CURLOPT_HEADER,         1);
$ret = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$ret = curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$ret = curl_setopt($ch, CURLOPT_TIMEOUT,        30);

// execute
$ret = curl_exec($ch);

if (!empty($ret)) {
    $info = curl_getinfo($ch);
    curl_close($ch); // close cURL handler
    if (empty($info['http_code'])) {
            die("No HTTP code was returned");
    } else {
        echo 'REDIRECTED FINAL URL'.$info['url']); // this does not give final url.
    }

}

在所有重定向之后,他们有什么方法可以从 url 获取最终 url 吗?让我知道是否需要在此代码中进行任何更改?

https://www.shareasale.com/m-pr.cfm?merchantID=83483&userID=1860618&productID=916465625

这是有很多重定向的 url,我正在用这个测试代码,但它不返回最终 url,它返回一些 url,然后是你在 url 栏中看到的 url。

标签: phpcurl

解决方案


您拥有的代码工作正常,但它只是您想要的一部分。当您到达最终 URL 重定向时,您的回报包括...

<HTML><head></head><body>

    
        <script LANGUAGE="JavaScript1.2">
        window.location.replace('https:\/\/loomyhome.com\/collections\/all-products\/products\/blue-my-mind-rug?sscid=71k5_300lf&')
        </script>
    

</body></html>

因此,您需要从那里提取 URL。您可以使用正则表达式(不是我最好的技能),类似于...

preg_match('#(https:.*?)\'\)#', $ret, $match);

echo stripslashes($match[1]);

stripslashes用于对字符串进行转义)。给...

https://loomyhome.com/collections/all-products/products/blue-my-mind-rug?sscid=71k5_3097f&

推荐阅读