php - 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。
解决方案
您拥有的代码工作正常,但它只是您想要的一部分。当您到达最终 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&
推荐阅读
- vb.net - mdi 子表单不会以同一个父项中的另一个 mdi 子表单为中心?
- google-colaboratory - 如何在 google-colab 中自动完成,即避免点击标签?
- mysql - 比较一个 nn 关系的所有记录
- java - 如何用东西替换一条线?
- matlab - 为 3D 空间中的点生成随机运动
- python - 在 Docker 上使用 python fcntl.ioctl 给出 Errno 22
- javascript - 在 React-Native 中渲染
- php - 使用 laravel 在 XAMPP 中的服务器上找不到请求的 URL
- google-cloud-dataflow - Apache Beam ReadFromText() 模式匹配不返回结果
- android - Kotlin 中是否可以接受“MyType+MyProtocol.kt”扩展文件名?