原题:
$a=http://aaa.com/a,跳转到$b=http://bbb.com/b.怎么通过$a获取到$b,请用php实现
看一分钟之后,直觉告诉PHP实现我不会。只知道url_a->url_b,b通过$_SERVER['HTTP_REFERER']
.可以知道a
后来百度,问好朋友。才知道自己理解的有偏差。
真实意图?
这道题的意思应该是 url重定向后怎么获取真实地址。
比如目前的短链接。提供方有百度,微博都有。实际做的就是在百度或者微博服务器上一个302临时重定向。另外也有基于短链接的营销分析等。
重定向的主要技术实现是生成短链,此处不是重点。
参考解答
下面用PHP解决上面的题目。
方法一
$url="http://dwz.cn/4Ww6cV";//
/** $url="http://g.cn";//实际会跳转到google.cn,
在此次贴下部分http头:注意看Status Code 和Location部分
Request URL:http://g.cn/
Request Method:GET
Status Code:301 Moved Permanently (from cache)
Remote Address:203.208.39.242:80
Response Headers
Cache-Control:private, max-age=2592000
Content-Length:218
Content-Type:text/html; charset=UTF-8
Date:Fri, 30 Dec 2016 05:58:51 GMT
Expires:Fri, 30 Dec 2016 05:58:51 GMT
Location:http://www.google.cn/
Server:gws
X-Frame-Options:SAMEORIGIN
X-XSS-Protection:1; mode=bloc
**/
$headers = get_headers($url,true);//加true更友好
var_dump($headers['Location']);
/**
output=>["Location"]=>
string(188) "https://www.taobao.com/markets/promotion/niandushengdian2016neiyi?spm=a21bo.50862.201862-1.d1.JGeGgF&pos=1&acm=20140506001.1003.2.1437526&scm=1003.2.20140506001.OTHER_1481324141839_1437526"
**/
方法二
$ch= curl_init($url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);//看名字就知道,follow location,去掉此选项无效
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_exec($ch);
$info = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
echo $info;
//=>output:https://www.taobao.com/markets/promotion/niandushengdian2016neiyi?spm=a21bo.50862.201862-1.d1.JGeGgF&pos=1&acm=20140506001.1003.2.1437526&scm=1003.2.20140506001.OTHER_1481324141839_1437526
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。